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

Ari*_*zer 6 javascript regex

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

如何使用javascript替换字符串中最后出现的字符

但它不符合我的需要.作为背景,我会说我正在尝试替换CSS规则,但是对于当前示例,我们来看看这个文本:

abcd:bka:

bbb:aad:

accx:aaa:

bbb:a0d:

cczc:aaa:
Run Code Online (Sandbox Code Playgroud)

假设我只想替换bbb的值.我现在的规则是

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

但它只会取代第一场比赛,而我希望它取代最后一场比赛.我目前的模式实际上比这个更复杂,但我认为伪问题就足够了.

Tim*_*ker 8

尝试

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

否定前瞻性断言确保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
Run Code Online (Sandbox Code Playgroud)

[\s\S],因为JavaScript没有一个选项,以使点匹配换行符解决方法是必要的.