2017-10-20 73 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

这解释了为什么我无法让我的正则表达式工作。我接受解决问题的答案。 –

相关问题