我有这个字符串:
var a='abc123#xyz123';
我想构建 2 个正则表达式替换函数:
1) 用 '*'
替换所有确实有 future '#'
的字符(不包括'#')
所以结果应该是这样的:
'******#xyz123'
2) 将所有不有 future '#'
的字符替换为'*'
(不包括'#')
所以结果应该是这样的:
'abc123#******'
我尝试了什么:
var a='abc123#xyz123';
alert(a.replace(/(.+(?=#))+/ig,'*')); //*#xyz123 --wrong result since it is greedy...
问题:
如何让我的正则表达式按预期工作?
最佳答案
第一部分使用前瞻:
repl = a.replace(/.(?=[^#]*#)/g, "*");
//=> "******#xyz123"
解释:
此正则表达式使用先行查找后跟 #
的任何字符,并将其替换为 *
。
第二部分使用替换回调:
repla = a.replace(/#(.*)$/, function(m, t) { return m[0] + t.replace(/./g, '*'); } );
//=> abc123#******
解释:
此代码在 #
之后查找文本。在回调函数中用星号替换每个字符。
关于javascript - 使用 Regex 正/负前瞻替换字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659826/