簡體   English   中英

使用正則表達式僅用JS替換最后一次出現的模式

[英]Using regex to replace only the last occurrence of a pattern with JS

我有一個案例,我試圖用另一個模式替換某個模式。 我的問題是我只需要替換該模式的最后一次出現,而不是全部。 我發現了這個問題:

如何使用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沒有允許點匹配換行符的選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM