我正在努力让我更深入地了解JS RegExp正在进行的项目。
因此,如果我检查包含foo
的所有字符串,然后检查不是数字的字符,我会使用/foo[^0-9]/
。但是,假设我想将匹配该模式的所有字符串更改为foobar
,然后更改原始字符,我将如何处理?
str = foozip;
newStr = str.replace(/foo[^0-9]/, "foobar");
console.log(newStr);
//returns foobarip Note the lack of a z.
str = foozip;
newStr = str.replace(/foo/, "foobar");
console.log(newStr);
//this matches foo6zip, which is no good
我是否必须单独检查才能执行此操作?有没有办法从替换的一侧携带未知的角色到另一侧?
答案 0 :(得分:4)
您有两种选择:
使用lookahead:
str.replace(/foo(?=[^0-9])/, "foobar")
使用捕获组:
str.replace(/foo([^0-9])/, "foobar$1")