Regex前瞻。查找没有.min的单词。串

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 除了那些字符包含单词

我试图用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

除了那些字符包含单词
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
    -单词边界
  • (?!.\.min\.js$)
    -紧靠右侧,字符串末尾不应该有任何0个或更多字符后跟
    .min.js
  • *
    -任何0个或更多字符
  • \.js
    -a
    .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