Javascript RegEx积极前瞻没有按预期工作

时间:2017-10-20 16:46:53

标签: javascript regex regex-lookarounds

首先,我在处理正则表达式方面不是很好但是我正在尝试创建一个匹配特定字符串的正则表达式,同时通过使用正向前方跳过匹配字符串的第一个字符来替换它。请参阅下面的详细信息

测试字符串asdf.wakawaka asdf.waka df.waka [df.waka (df.waka _df.waka {df,waka

RegEx (?=[^\w])df\.

替换字符串kkk.

预期结果asdf.wakawaka asdf.waka kkk.waka [kkk.waka (kkk.waka _df.waka {df,waka

但上面的正则表达式找不到任何匹配,因此它不会替换任何结果,并在结果中给出原始测试字符串。

没有正向前瞻(跳过第一个角色策略),它符合我的要求。见matching regex sample on regex101.com

积极前瞻会带来意想不到的结果regex with positive look aheah on regex101.com

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用[^\w]表示您希望在需要替换的匹配项之前匹配并使用除字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.')
);