2016-12-20 32 views
0

我想为匹配正则表达式的字符串数组的每个元素执行一些操作。更好的方法,而不是在JavaScript中使用字符串替换

我已经能够通过使用替换功能来解决此问题:

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); 
    } 
})); 

正如你看到的,我不是真的需要的所有替换操作。我知道它不会修改我的密钥,我只是想知道是否有任何其他类型的函数定义在字符串更适合这项工作。

我试过匹配,但没有收到函数作为第二个参数。

输出采样(谷歌浏览器)

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

由于您不修改密钥,因此您的函数*做了什么? – Bergi

+0

如果我使用过滤器,那么我不能访问替换函数提供的参数(我认为)。为了更好的理解,我会稍微编辑一下这个问题 – Mayday

回答

0

你可能会寻找

假设正则表达式总是整个字符串,而不是多次匹配在它的部分

0

可以使用split然后join比如你要替换任何符号字符的正则表达式“ - ”然后

myString.split(/[^\w-]/).join('-')

相关问题