正则表达式向前看。查找不带.min的单词。在字符串中

时间:2019-06-05 13:44:16

标签: regex

我正在尝试用正则表达式和nodejs替换html文件中的链接。我想替换不带.min.js扩展名的链接。

例如,它应该匹配“ common.js”,但不能匹配“ common.min.js”

这是我尝试过的:

let htmlOutput = html.replace(/common\.(?!min)*js/g, common.name);

我认为这种负面的前瞻应该可以解决,但不匹配任何东西。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

(?!min)*js部分已损坏:您不应该量化零宽度断言,例如前瞻(它们不消耗文本,因此将其后的修饰符视为用户错误或被忽略)。由于js并非以min开头,因此即使没有量词,这种前瞻也是多余的。

如果您想将一个字符串与整个单词common匹配,则可以包含任何字符并以.js而不是.min.js结尾

/\bcommon\b(?!.*\.min\.js$).*\.js$/

请参见regex demo

详细信息

  • \b-单词边界
  • common-子字符串
  • \b-单词边界
  • (?!.*\.min\.js$)-在右边,字符串的末尾不应有0个或多个字符,后跟.min.js
  • .*-任意0个或更多字符
  • \.js-一个.js子字符串
  • $-字符串的结尾。

答案 1 :(得分:1)

在这里,我们很可能可以找到一个简单的表达式来传递除换行符和.之外的任何char,在单词common之后紧跟.js

common([^\.]+)?\.js

Demo

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 2 :(得分:0)

我正在使用的最终正则表达式为/\bcommon[^min]+js\b/g

这将找到与所有汉字后缀相同的单词,除非这些字符包含单词min并以js结尾,使我可以替换html页面上的脚本,例如:

脚本src =“〜/ dist / common.js”

OR

脚本src =“〜/ dist / common.9cf5748e0e7fc2928a07.js”

感谢Wiktor Stribiewew帮助我。