【问题标题】:Javascript RegEx positive lookahead not working as expectedJavascript RegEx 积极前瞻未按预期工作
【发布时间】:2017-10-20 16:46:53
【问题描述】:

首先,我不太擅长处理正则表达式,但我正在尝试创建一个正则表达式来匹配特定字符串,同时通过使用正向前瞻性跳过匹配器字符串的第一个字符来替换它。详情请看下文

测试字符串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

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

如果没有积极的前瞻(跳过第一个字符策略),它符合我的要求。见matching regex sample on regex101.com

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

提前感谢您的帮助。

【问题讨论】:

  • 喜欢THIS?
  • 对@Gurman,这正是我错过的。

标签: javascript regex regex-lookarounds


【解决方案1】:

使用[^\w] 表示您要在需要替换的匹配项之前匹配并使用除单词字符之外的字符。

但是,这个字符是消耗的,如果不先捕获它就无法恢复它。您可以使用 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.')
);

【讨论】:

  • 这解释了为什么我不能让我的正则表达式工作。我接受答案,因为它解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 2020-05-11
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多