正则表达式 - 以特定字符串开头但不以另一个子字符串结尾

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式 - 以特定字符串开头但不以另一个子字符串结尾相关的知识,希望对你有一定的参考价值。

鉴于两个字符串s1s2,我正在尝试编写一个正则表达式,它将匹配以s1开头但不以s2结尾的字符串

示例(s1 = TEST,s2 = BAD)

  • TEST-101匹配
  • TEST-SOME-DESC匹配
  • TEST-101-BAD不应该匹配
  • TEST-SOME-DESC-BAD不应该匹配

这是我为这个例子尝试但它不起作用:/^TEST-.*((??BAD))$/

答案

试试这个:

/^(?!.+BAD$)TEST-.*/

这匹配开始,继续并拒绝任何以坏字符串结尾的内容,然后匹配所需的模式。

这是一个通过所有四个测试的demo(点击底部的“RUN TESTS”进行验证)。

另一答案

你可以使用startsWithendsWith

let arr = [`TEST-101`, `TEST-SOME-DESC`,`TEST-101-BAD`,`TEST-SOME-DESC-BAD`]

arr.forEach(e=>{
  console.log(e, e.startsWith('TEST') && !e.endsWith('BAD'))
})

以上是关于正则表达式 - 以特定字符串开头但不以另一个子字符串结尾的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:如何匹配不以前缀列表开头的子字符串

如何使用正则表达式匹配不以某些字符开头或结尾的单词?

正则表达式:数字开头中间字母结尾数字

js正则表达式过滤以指定字符开头以指定字符结尾的文本内容

正则表达式

如何删除所有不以某些字符开头的行?