我需要一个不匹配特定字符串后的字符串的正则表达式,假设我有以下字符串
4515856581128483548598852649285965451533568536158523
在上面的字符串中,除了紧接在 8 之后的 5 之外,我必须将所有 5 替换为 0,如下所示:
4010856081128483048598852649285960401033068536108523
我试过,如下:
"4515856581128483548598852649285965451533568536158523".replace(/5(?!8)/g,'0')
"4015806581128483048098802649280960401033068036158023"
它替换了所有 5,除了后跟 8,所以我尝试:
"4515856581128483548598852649285965451533568536158523".replace(/(?!8)5/g,'0')
"4010806081128483048098802649280960401033068036108023"
它取代了所有的 5。我如何将所有 5 替换为 0,除了紧接在 8 之后的 5?
最佳答案
你可以使用下面的正则表达式
.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'));
关于javascript - 不匹配特定字符串后的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47172575/