我正在寻找一个正则表达式来查找包含某些字母的某些单词。
我有单词start
,通过正则表达式,它应该找到包含(s,两个t,a,r)且至少包含3个字母的单词。因此,它应该返回所有这些单词:
start
,tarts
,arts
,art
。因此,至少应包含三个字母,并且仅包含这些字符(s,两个t,a,r)。
我尝试过这样的事情:
/(([^s]*s){1})(([^t]*t){2})(([^a]*a){1})([^r]*r){1}/g
但是此正则表达式不起作用,因为它必须按此顺序排列。
我也尝试过这个:
[star]{3,}
但是它匹配[]
中的任意数量的字符,例如它匹配sss
答案 0 :(得分:8)
您可以将此正则表达式与2个否定的超前断言一起使用:
/\b(?!\w*([sar])\w*\1)(?!(?:\w*t){3})[sart]{3,}\b/
RegEx详细信息:
\b
:单词边界声明(?!\w*([sar])\w*\1)
:表示我们没有多个[sar]
字母实例的否定前瞻(?!(?:\w*t){3})
:表示我们没有超过2个t
字母的否定前瞻[sart]{3,}
:匹配3个以上包含[sart]
个字符的字符答案 1 :(得分:0)
这不是一个有趣的答案,但是加倍t确实使这一点变得困难。某些复杂的向后引用可能是可行的……但更暴力的解决方案是编写一些代码以选择所有选项,然后将它们放入用|分隔的捕获组中。
a la :(开始|艺术|设计|交易|交易| ...)
绝对不漂亮,但这可以工作。