我正在尝试用正则表达式和nodejs替换html文件中的链接。我想替换不带.min.js扩展名的链接。
例如,它应该匹配“ common.js”,但不能匹配“ common.min.js”
这是我尝试过的:
let htmlOutput = html.replace(/common\.(?!min)*js/g, common.name);
我认为这种负面的前瞻应该可以解决,但不匹配任何东西。任何帮助将不胜感激。
答案 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
jex.im可视化正则表达式:
答案 2 :(得分:0)
我正在使用的最终正则表达式为/\bcommon[^min]+js\b/g
这将找到与所有汉字后缀相同的单词,除非这些字符包含单词min
并以js
结尾,使我可以替换html页面上的脚本,例如:
脚本src =“〜/ dist / common.js”
OR
脚本src =“〜/ dist / common.9cf5748e0e7fc2928a07.js”
感谢Wiktor Stribiewew帮助我。