-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
29 lines (24 loc) · 1.46 KB
/
Copy pathscript.js
File metadata and controls
29 lines (24 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const formatPattern = (inputStr, pattern, example='') => {
const strRegExp = String(pattern).replace(/(^\/(?=[^\^]))|((?<=[^$])\/.*$)/g, '')
// fixed
const arrStrRegFixed = strRegExp.replace(/\\/g, '').split(/\([^()]+\)/g)
const arrCharRegFixed = arrStrRegFixed.reduce((acc, e)=> [...acc, ...e], [])
// dynamic
const arrStrRegDynamic = strRegExp.match(/\([^()]+\)/g)
const regExpDynamic = RegExp(arrStrRegDynamic.join(''))
const inputStrDynamic = arrCharRegFixed.reduce((acc, e) => acc.replace(e, ''), inputStr)
const exampleDynamic = arrCharRegFixed.reduce((acc, e) => acc.replace(e, ''), example)
// Format
const format = arrStrRegFixed.reduce((acc, e, i) => acc+e+'$'+(i+1), '').replace(/\$\d+$/, '')
const exampleToComplete = exampleDynamic.slice(inputStrDynamic.length)
const inputStrCompleted = inputStrDynamic + exampleToComplete
const inputStrCompletedFormated = inputStrCompleted.replace(regExpDynamic, format).replace(/(.*\/\^)|(\$\/.*)/g, '')
const inputStrFormated = [...exampleToComplete].reverse().reduce((acc, e)=>
acc.slice(0, acc.lastIndexOf(e)), inputStrCompletedFormated)
return inputStrCompletedFormated == inputStrCompleted ? false : inputStrFormated
}
const applyMask = pattern => {
const inputEl = event.target
const example = inputEl.placeholder
setTimeout(()=> inputEl.value = formatPattern(inputEl.value, pattern, example) || inputEl.value.slice(0, -1), 0)
}