javascript - 使用 Regex 正/负前瞻替换字符?

标签 javascript regex

我有这个字符串:

var a='abc123#xyz123';

我想构建 2 个正则表达式替换函数:

1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#')

所以结果应该是这样的:

'******#xyz123'

2) 将所有有 future '#'的字符替换为'*'(不包括'#')

所以结果应该是这样的:

'abc123#******'

我尝试了什么:

For the positive lookahead :

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/

相关文章:

javascript - 如何在不使用自定义服务器的情况下在 Next.js 中设置自定义 HTTP 响应 header ?

javascript - 如何使用 Javascript 输入 2 个框

javascript - 正则表达式 - 测试或匹配

java - 用双引号封装时转义序列与预定义字符类(也称为特殊正则表达式字符)

regex - 带有正则表达式的 MongoDB findOne(安全漏洞?)

mysql - grepWin 中的正则表达式匹配文本 block 中由任何内容分隔的三个指定单词

javascript - 变量访问原型(prototype)

javascript - Mediaelement.js:如何更改海报图片?

javascript - 函数调用 Node.js 库中其他函数的问题

regex - Shell 脚本 Sed - 如何仅在第一次出现字符串时读取文件并写入另一个文件?