考虑以下文字
测试这个$测试这个$测试这个
如果我使用javascript的替换函数replace(/test/g, "9");
,则会生成以下输出
这个9美元这个9美元这个
如何指定排除$$之间的任何解析,以便我得到以下输出
9这个$测试这个$ 9这个
我可以使用匹配/\$[^$]*\$|(test)/
的回调函数生成所需的输出但是有一个简单的方法吗?请帮忙
答案 0 :(得分:1)
这有点笨拙,但有效。您可以在$
上展开字符串,然后重新组合它:
function toNine(str) {
return str.replace(/test/g, '9');
}
function transformInput(input) {
portions = input.split('$');
return toNine(portions[0]) +
'$' + portions[1] + '$' +
toNine(portions[2]);
}
const input = 'testing this $testing this$ testing this';
console.log(transformInput(input));
答案 1 :(得分:1)
查找((?:\$[^$]*\$[^$]*?)*?)test
替换${1}9
测试
https://regex101.com/r/XevoHB/1
Exoanded
( # (1 start)
(?:
\$ [^$]* \$
[^$]*?
)*?
) # (1 end)
test
JS代码
const regex = /((?:\$[^$]*\$[^$]*?)*?)test/g;
const str = `testing this \$testing this\$ testing this`;
const subst = `${1}9`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
答案 2 :(得分:-2)
你可以使用:
/[$]test/g //correspond to all occurrences of "test" with the '$' char before
所以有3行:
var text = "testing this $testing this$ testing this";
text=text.replace(/[$]test/g, "ignore");
text=text.replace(/test/g, "9");
text=text.replace(/ignore/g, "$test");
EDIT(没有标记错误的解决方案):
var text = "testing this $testing this$ testing this ";
var array = text.split(" ");
for (var i=0; i<array.length; i++){
if (array[i].contains("$test")){
//do nothing
}
else{
array[i] = array[i].replace(/test/g, "9");
}
}
text = array.join(" ");