我有一个案例,我试图用另一个模式替换某个模式.我的问题是我只需要替换该模式的最后一次出现,而不是全部.我发现了这个问题:
但它不符合我的需要.作为背景,我会说我正在尝试替换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)
但它只会取代第一场比赛,而我希望它取代最后一场比赛.我目前的模式实际上比这个更复杂,但我认为伪问题就足够了.
尝试
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没有一个选项,以使点匹配换行符解决方法是必要的.
| 归档时间: |
|
| 查看次数: |
10105 次 |
| 最近记录: |