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

标签 javascript regex string

我需要一个不匹配特定字符串后的字符串的正则表达式,假设我有以下字符串

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')

正则表达式将搜索 855。如果找到 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/

相关文章:

python - 在 Python 2.7.1 中使用 itertools、yield 和 iter() 生成带有滑动窗口的字符串列表?

c - 将数组传递给 "qsort"是如何工作的?

javascript - 如何在 Mongoose 中找到 "By Name"

javascript - Firefox 中未定义 IMG1

javascript - 获取 HTML 元素 (iframe) 中的元素数量

regex - 有空间还是没有空间

.net - 至少两个唯一字符的正则表达式

regex - 使用 regexp_split_to_array 将文本列拆分为 2

java - 分割字符串并使用正则表达式从复杂的字符串中获取值

javascript - 如何在 Angular 4 react 形式的控件初始化后添加自定义验证?