[英]Using regex to replace only the last occurrence of a pattern with JS
我有一個案例,我試圖用另一個模式替換某個模式。 我的問題是我只需要替換該模式的最后一次出現,而不是全部。 我發現了這個問題:
但它不符合我的需要。 作為背景,我會說我正在嘗試替換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沒有允許點匹配換行符的選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.