我正在尝试为字符串数组的每个元素执行一些操作,当它与正则表达式匹配时。
我已经能够通过使用替换功能来解决这个问题:
const anyRegExp = new RegExp('string[(\d)]');
const sampleArr = ['string[1].name','string[2].name' /*,...*/]
const myOp1 = (...args) => /* operations */
const myOp2 = (...args) => /* different operations */
sampleArr.forEach(key => key.replace(anyRegExp, (par1, par2, par3, par4) => {
console.log(par1, par2, par3, par4);
// prints: 'string[1]', '1', 1, 'string[1].name'
// 'string[2]', '2', 2, 'string[2].name'
if (par3 > 1) {
myOp(par1,par2,par3,par4);
} else {
myOp2(par1,par2,par3,par4);
}
}));
如你所见,我根本不需要替换操作。我知道它不会修改我的密钥,我只是想知道在String中是否有任何其他类型的函数更适合这项工作。
我尝试过匹配,但它没有收到第二个参数的功能。
输出样本(使用谷歌浏览器)
const temp1 = /Tests.MyTests\[(\d+)\]/
const temp2 = "Tests.MyTests[0].name"
temp2.match(temp1, (...args) => console.log('args',args))
outputs--> ["Tests.MyTests[0]", "0"]
temp2.replace(temp1, (...args) => console.log('args',args))
logs--> args ["Tests.MyTests[0]", "0", 0, "Tests.MyTests[0].name"]
outputs--> "undefined.name"
可以看出,替换,接收一个函数,它给了我4个参数,这是我想要使用的参数。
匹配不会记录任何内容
const temp1 = /Tests.MyTests\[(\d+)\]/
const temp2 = "Tests.MyTests[0].name"
temp2.match(temp1, (...args) => console.log('args',args));
const temp1 = /Tests.MyTests\[(\d+)\]/
const temp2 = "Tests.MyTests[0].name"
temp2.replace(temp1, (...args) => console.log('args',args))
答案 0 :(得分:0)
您可能正在寻找
for (let key of sampleArr)
myOp(...key.match(anyRegExp)) // or anyRegExp.exec(key)
假设正则表达式总是匹配整个字符串,而不是多次匹配
答案 1 :(得分:0)
你可以使用split
然后使用join
例如你想用“ - ”替换任何符号字符正则表达式然后
myString.split(/[^\w-]/).join('-')