替换后,请跳过字符串的这一部分-Regex Javascript

时间:2018-09-04 16:47:56

标签: javascript regex vue.js

我希望从HTML输入框输入一个只有数字的字符串,但是我正在寻找一个正则表达式,以便可以捕获字符串的一部分并将其替换为某些内容,现在我想要的是,对于下一次迭代,正则表达式应该跳过其中的一部分已处理。

看看我的正则表达式

string.replace(/([\d]{10})/gm, "$1,")

预期的迭代结果

  1. 895645784578457845784578457845 source
  2. 8956457845,7845784578,4578457845,9089 more data is coming

但是问题是结果

  1. 8956457845,7845784578,4578457845
  2. 8956457845 ,,, 7845784578 ,,, 4578457845 ,,, 9089

1 个答案:

答案 0 :(得分:3)

如果我理解正确,那么您想像string.replace(\regex\, '$1,').replace(\regex\, '$1,').replace(\regex\, '$1,')一样递归地对一个数字字符串应用regex-replace,但是忽略了已替换的部分。

以下是一种使用负向超前的解决方案。

let test = '895645784578457845784578457845' //org string
let test1 = test.replace(/(\d{10}(?!\,))/gm, "$1,")
                .replace(/(\d{10}(?!\,))/gm, "$1,")
                .replace(/(\d{10}(?!\,))/gm, "$1,") 
                // simulate recurse-replace three times
console.log(test1)

test1 += '1234567890123' //new string came
let test2 = test1.replace(/(\d{10}(?!\,))/gm, "$1,")
console.log(test2)

test2 += '1234567890123' //new string came
let test3 = test2.replace(/(\d{10}(?!\,))/gm, "$1,")
console.log(test3)