我要求在特定字符串后匹配字符串的正则表达式,假设我有以下字符串
4515856581128483548598852649285965451533568536158523
在上面的字符串中,我必须将所有的5替换为0,除了5s之后立即替换为8,如下所示:
4010856081128483048598852649285960401033068536108523
我试过,如下:
"4515856581128483548598852649285965451533568536158523".replace(/5(?!8)/g,'0')
"4015806581128483048098802649280960401033068036158023"
它取代了所有5个,除了后面跟着8,所以我尝试了:
"4515856581128483548598852649285965451533568536158523".replace(/(?!8)5/g,'0')
"4010806081128483048098802649280960401033068036108023"
它取代了所有5个。我怎样才能将所有的5替换为0除了5之后的8?
答案 0 :(得分:3)
您可以使用以下正则表达式
.replace(/(85)|5/g, (m, $1) => $1 || '0')
正则表达式将搜索85
或5
。如果找到5
后跟8,则不会发生替换。如果没有85
,匹配的5
将被0
替换。
请注意,此处$1
是匹配时第一个捕获的组的值,即85
。如果找不到85
,则$1
将为空字符串,因此OR条件将返回第二个值,即'0'
。
console.log('4515856581128483548598852649285965451533568536158523'.replace(/(85)|5/g, (m, $1) => $1 || '0'));