一种更好的方法,而不是在JavaScript中使用String替换

时间:2016-12-20 14:04:12

标签: 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);
  }
}));

如你所见,我根本不需要替换操作。我知道它不会修改我的密钥,我只是想知道在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))

2 个答案:

答案 0 :(得分:0)

您可能正在寻找

for (let key of sampleArr)
    myOp(...key.match(anyRegExp)) // or anyRegExp.exec(key)

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

答案 1 :(得分:0)

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

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