在特定字符串后不匹配字符串的正则表达式

时间:2017-11-08 06:00:16

标签: javascript regex string

我要求在特定字符串后匹配字符串的正则表达式,假设我有以下字符串

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?

1 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式

.replace(/(85)|5/g, (m, $1) => $1 || '0')

正则表达式将搜索855。如果找到5后跟8,则不会发生替换。如果没有85,匹配的5将被0替换。

请注意,此处$1是匹配时第一个捕获的组的值,即85。如果找不到85,则$1将为空字符串,因此OR条件将返回第二个值,即'0'



console.log('4515856581128483548598852649285965451533568536158523'.replace(/(85)|5/g, (m, $1) => $1 || '0'));