正则表达式查找包含这些字母的单词

时间:2019-02-19 17:36:15

标签: javascript regex

我正在寻找一个正则表达式来查找包含某些字母的某些单词。 我有单词start,通过正则表达式,它应该找到包含(s,两个t,a,r)且至少包含3个字母的单词。因此,它应该返回所有这些单词: starttartsartsart。因此,至少应包含三个字母,并且仅包含这些字符(s,两个t,a,r)。

我尝试过这样的事情:

/(([^s]*s){1})(([^t]*t){2})(([^a]*a){1})([^r]*r){1}/g

但是此正则表达式不起作用,因为它必须按此顺序排列。

我也尝试过这个:

[star]{3,}

但是它匹配[]中的任意数量的字符,例如它匹配sss

2 个答案:

答案 0 :(得分:8)

您可以将此正则表达式与2个否定的超前断言一起使用:

/\b(?!\w*([sar])\w*\1)(?!(?:\w*t){3})[sart]{3,}\b/

RegEx Demo

RegEx详细信息:

  • \b:单词边界声明
  • (?!\w*([sar])\w*\1):表示我们没有多个[sar]字母实例的否定前瞻
  • (?!(?:\w*t){3}):表示我们没有超过2个t字母的否定前瞻
  • [sart]{3,}:匹配3个以上包含[sart]个字符的字符

答案 1 :(得分:0)

这不是一个有趣的答案,但是加倍t确实使这一点变得困难。某些复杂的向后引用可能是可行的……但更暴力的解决方案是编写一些代码以选择所有选项,然后将它们放入用|分隔的捕获组中。

a la :(开始|艺术|设计|交易|交易| ...)

绝对不漂亮,但这可以工作。