Regex前瞻。查找没有.min的单词。串
我试图用regex和nodejs替换html文件中的链接。我想替换没有.min.js扩展名的链接 例如,它应该匹配“common.js”,而不是“common.min.js” 以下是我尝试过的:Regex前瞻。查找没有.min的单词。串,regex,Regex,我试图用regex和nodejs替换html文件中的链接。我想替换没有.min.js扩展名的链接 例如,它应该匹配“common.js”,而不是“common.min.js” 以下是我尝试过的: let htmlOutput = html.replace(/common\.(?!min)*js/g, common.name); 我认为这种消极的前瞻应该是可行的,但它与任何东西都不匹配。任何帮助都将不胜感激。我使用的结束正则表达式是/\bcomon[^min]+js\b/g 除了那些字符包含单词
let htmlOutput = html.replace(/common\.(?!min)*js/g, common.name);
我认为这种消极的前瞻应该是可行的,但它与任何东西都不匹配。任何帮助都将不胜感激。我使用的结束正则表达式是
/\bcomon[^min]+js\b/g
除了那些字符包含单词min
并以js
结尾,允许我替换html页面上的脚本,如:
脚本src=“~/dist/common.js”
或
脚本src=“~/dist/common.9cf5748e0e7fc2928a07.js”
感谢Wiktor Stribiżew的帮助。在这里,我们可能会找到一个简单的表达式来传递任何字符,除了新行和
,在单词common
之后,后跟.js
:
common([^\.]+)?\.js
正则表达式电路
可视化正则表达式:
部分(?!min)*js
已损坏:您不应该量化像lookaheads这样的零宽度断言(它们不使用文本,因此后面的量词会被视为用户错误或被忽略)。由于js
不以min
开头,因此即使没有量词,这种前瞻也是多余的
如果要将字符串与整个单词common
匹配,则需要使用任何字符并以.js
结尾,而不是.min.js
/\bcommon\b(?!.*\.min\.js$).*\.js$/
看
详细信息:
-单词边界\b
-子字符串common
-单词边界\b
-紧靠右侧,字符串末尾不应该有任何0个或更多字符后跟(?!.\.min\.js$)
.min.js
-任何0个或更多字符*
-a\.js
子字符串.js
-字符串结束$
让htmlOutput=html.replace(/\bcommon\.js\b/g,common.name)代码><代码>(?!min)*js
毫无意义。@WiktorStribiżew似乎不起作用。它是。此外,请参见@WiktorStribiżew。这一定是阻止比赛的另一个问题。我看一下,然后再给你回复。common.name
,顺便说一句,你大错特错了\bcommon[^min]+js\b
匹配common
,后跟除m
、i
、n
之外的一个或多个字符,后跟js
子字符串。所以从你的描述来看,你需要\b命令(?(!min)。*?js\b
。或\bcommon\b(?!\S*\.min\.js\b)\S*\.js\b