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

Javascript 正则表达式-以特定字符串开头,但不以另一个子字符串结尾,javascript,regex,ruby,Javascript,Regex,Ruby,给定两个字符串s1和s2,我试图编写一个正则表达式,该正则表达式将匹配以s1开头但不以s2结尾的字符串 示例(s1=测试,s2=错误) 测试-101比赛 测试描述匹配 TEST-101-BAD不应匹配 TEST-SOME-DESC-BAD不应匹配 下面是我在这个示例中尝试的内容,但它不起作用:/^TEST-.*(?!BAD))$/试试这个: /^(?!.+BAD$)TEST-.*/ 这将匹配开始,继续并拒绝以坏字符串结尾的任何内容,然后匹配所需的模式 这是一个通过所有四项测试的测试(单击底

给定两个字符串
s1
s2
,我试图编写一个正则表达式,该正则表达式将匹配以
s1
开头但不以
s2
结尾的字符串

示例(s1=测试,s2=错误)

  • 测试-101比赛
  • 测试描述匹配
  • TEST-101-BAD不应匹配
  • TEST-SOME-DESC-BAD不应匹配
下面是我在这个示例中尝试的内容,但它不起作用:/^TEST-.*(?!BAD))$/

试试这个:

/^(?!.+BAD$)TEST-.*/
这将匹配开始,继续并拒绝以坏字符串结尾的任何内容,然后匹配所需的模式


这是一个通过所有四项测试的测试(单击底部的“运行测试”进行验证)。

您可以使用
startsWith
endsWith

让arr=[`TEST-101`、`TEST-SOME-DESC`、`TEST-101-BAD`、`TEST-SOME-DESC-BAD`]
arr.forEach(e=>{
log(e,e.startsWith('TEST')&&!e.endsWith('BAD'))

})
我正在寻找纯正则表达式解决方案感谢您的快速响应。我不明白为什么负面展望会出现在模式的开头。把它放在结尾的问题基本上是没有任何东西可以匹配。假设您的字符串是
TEST-101-BAD
。在您尝试的正则表达式中,
^TEST-.*
片段可以匹配整个字符串,包括
BAD
。因为这是真的,所以没有更多的字符可以匹配,所以
(?!BAD)
检查出来。然后是字符串的结尾(
$
),因此字符串通过。您真正想要并且非常适合这种情况的是“反向查找断言”(请参阅),但JavaScript的正则表达式风格不支持它。@CarySwoveland感谢您的建议,我根据您的建议改进了这个问题。那“TEST-101-SINBAD”呢?(航海名气)我知道“TEST-101-SINBAD”的公认解决方案将失败(因为我希望它不匹配)。但是我想到了如何编写实际的正则表达式。如果您将正则表达式更改为
/^(?。+\bBAD$)TEST-.*/
\b
作为一个断字,
“TEST-101-SINBAD”
将被接受。谢谢@CarySwoveland