如何编写在子字符串上不匹配并以字符串结尾的正则表达式?
How to write regex that does not match on a substring and ends in a string?
我想编写规则(在 Webpack 中使用)匹配不包含子字符串 xeditor
且以 .css
结尾的字符串。如果子字符串 xeditor
出现在字符串中的任何位置,则应将其丢弃(即不匹配)。
到目前为止我想出了:
(?!.*xeditor.).*css?$
我在 https://www.regextester.com/ 中进行了测试,但它仍然匹配这样的字符串:
globalsite/xeditor/styles.css
它表明 globalsite/x
之后的所有内容,即 editor/styles.css
是匹配项。因为它在字符串中包含 xeditor
我希望它的 none 匹配。
我该怎么做?
要匹配以特定模式结尾但不包含其他模式的字符串,您可以使用像
这样的正则表达式
^(?!.*pattern1).*pattern2$
否定先行模式必须在开始时锚定先行检查,否则,在字符串中的每个位置检查表达式,(?!.*pattern1)
可能匹配一个不在开始的位置,在中间的某个地方,右边没有 pattern1
,但它仍然可以在左边。
详细了解为什么 "Lookarounds (Usually) Want to be Anchored" at rexegg.com。
在这里,您可以使用
^(?!.*xeditor).*\.css$
参见regex demo。
请注意 .
必须进行转义才能被解析为文字点字符。
详情
^
- 字符串的开头
(?!.*xeditor)
- 如果除换行字符外还有 0+ 个字符,则匹配失败的否定前瞻,尽可能多,然后 xeditor
.*
- 除换行字符外的 0+ 个字符,尽可能多
\.css$
- .css
字符串末尾的子字符串。
我想编写规则(在 Webpack 中使用)匹配不包含子字符串 xeditor
且以 .css
结尾的字符串。如果子字符串 xeditor
出现在字符串中的任何位置,则应将其丢弃(即不匹配)。
到目前为止我想出了:
(?!.*xeditor.).*css?$
我在 https://www.regextester.com/ 中进行了测试,但它仍然匹配这样的字符串:
globalsite/xeditor/styles.css
它表明 globalsite/x
之后的所有内容,即 editor/styles.css
是匹配项。因为它在字符串中包含 xeditor
我希望它的 none 匹配。
我该怎么做?
要匹配以特定模式结尾但不包含其他模式的字符串,您可以使用像
这样的正则表达式^(?!.*pattern1).*pattern2$
否定先行模式必须在开始时锚定先行检查,否则,在字符串中的每个位置检查表达式,(?!.*pattern1)
可能匹配一个不在开始的位置,在中间的某个地方,右边没有 pattern1
,但它仍然可以在左边。
详细了解为什么 "Lookarounds (Usually) Want to be Anchored" at rexegg.com。
在这里,您可以使用
^(?!.*xeditor).*\.css$
参见regex demo。
请注意 .
必须进行转义才能被解析为文字点字符。
详情
^
- 字符串的开头(?!.*xeditor)
- 如果除换行字符外还有 0+ 个字符,则匹配失败的否定前瞻,尽可能多,然后xeditor
.*
- 除换行字符外的 0+ 个字符,尽可能多\.css$
-.css
字符串末尾的子字符串。