javascript - 使用正则表达式仅用 JS 替换模式的最后一次出现

标签 javascript regex

我有一个案例,我试图用另一种模式替换某种模式。我的问题是我只需要替换该模式的最后一次出现,而不是全部。我发现了这个问题:

How to replace last occurrence of characters in a string using javascript

但它不符合我的需求。作为背景,我会说我正在尝试替换 CSS 规则,但对于当前示例,让我们看一下这段文字:

abcd:bka:

bbb:aad:

accx:aaa:

bbb:a0d:

cczc:aaa:

假设我只想替换 bbb 的值。我目前的规则是

text.replace(/(\s*bbb:)([^:]+)/,"$1aaa")

但它只会替换第一个匹配项,而我希望它替换最后一个匹配项。 我当前的模式实际上比这个更复杂,但我认为伪问题就足够了。

最佳答案

尝试

text.replace(/(\s*bbb:)(?![\s\S]*bbb:)[^:]+/,"$1aaa")

否定先行断言确保文本中没有进一步的bbb:[^:]+ 两边的括号是不必要的。

解释:

(?!       # Assert that it is impossible to match the following after the current position:
 [\s\S]*  # any number of characters including newlines
 bbb:     # the literal text bbb:
)         # End of lookahead assertion

[\s\S] 解决方法是必要的,因为 JavaScript 没有允许点匹配换行符的选项。

关于javascript - 使用正则表达式仅用 JS 替换模式的最后一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4744689/

相关文章:

javascript - 在 Firebase Promise 中使用 'this' 和 React Native

javascript - jquery jquery.RotateImageMenu 未捕获语法错误 : Unexpected end of input

javascript - 正则表达式模式匹配问题

java - 用于屏蔽电子邮件的正则表达式

javascript - 如何将项目推送到 json 文件?

javascript - 使用 For 循环将 JS 数字转为文本

javascript - 每个 div 中的随机数

regex - Perl:从文件中间读取时如何避免正则表达式 UTF-8 错误

php - 格式化电话号码(如果缺少,请检测并添加国家代码)

ios - objective-c 中的正则表达式正负十进制值