2017-10-20 115 views
1

首先,我不擅長處理正則表達式但我試圖創建一個正則表達式來匹配特定的字符串,同時使用正向展望跳過匹配字符串的第一個字符來替換它。請參考下面Javascrip正則表達式正向lookahead不按預期方式工作

測試字符串詳細asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka

正則表達式(?=[^\w])df\.

替換字符串kkk.

預期結果asdf.wakawaka asdf.waka kkk.waka [kkk.waka (kkk.waka _df.waka {df,waka

但正則表達式以上DOS沒有發現任何比賽因此沒有替換結果並在結果中給出原始測試字符串。

如果沒有積極的預測(跳過第一個字符策略),它符合我的要求。看到matching regex sample on regex101.com

正前瞻給人意想不到的效果regex with positive look aheah on regex101.com

預先感謝任何幫助。

+1

喜歡[此](https://regex101.com/r/efjzQk/3)? – Gurman

+0

Right @Gurman,這正是我錯過的。 –

回答

1

使用​​表示您希望在需要替換的匹配之前匹配並消耗字符char以外的字符。

然而,這個字符是消耗,你不能恢復它,而不先捕獲它。您可以使用GURMAN的方法來匹配/(^|\W)df\./g'$1kkk.取代,但你也可以使用一個單詞邊界:

\bdf\. 

regex demo

JS演示:

var s = "asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka"; 
 
console.log(
 
    s.replace(/\bdf\./g, 'kkk.') 
 
);

但是,如果您不想替換df.在字符串的開始時,使用

var s = "df. asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka"; 
 
console.log(
 
    s.replace(/(\W)df\./g, '$1kkk.') 
 
);

+1

這解釋了爲什麼我無法讓我的正則表達式工作。我接受解決問題的答案。 –

相關問題