我有一个案例,我试图用另一个模式替换某个模式。我的问题是我只需要替换该模式的最后一次出现,而不是全部。我发现了这个问题:
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")
但它只会取代第一场比赛,而我希望它取代最后一场比赛。 我目前的模式实际上比这个更复杂,但我认为伪问题就足够了。
答案 0 :(得分:8)
尝试
text.replace(/(\s*bbb:)(?![\s\S]*bbb:)[^:]+/,"$1aaa")
负前瞻断言确保文本中没有前面的bbb:
。 <{1}}周围的括号是不必要的。
<强>解释强>
[^:]+
(?! # 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
解决方法是必要的,因为JavaScript没有允许点匹配换行符的选项。