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

问题描述 投票:1回答:2

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

示例(s1 = TEST,s2 = BAD)

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

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

javascript regex ruby
2个回答
2
投票

试试这个:

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

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

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


-1
投票

你可以使用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'))
})
© www.soinside.com 2019 - 2024. All rights reserved.