【问题标题】:Regex to find words that contains these letters正则表达式查找包含这些字母的单词
【发布时间】:2019-02-19 17:36:14
【问题描述】:

我正在寻找一个正则表达式来查找一些包含一些字母的单词。 我有单词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

【问题讨论】:

  • 没有什么好方法可以做你想做的事。正则表达式有一些限制,有时您应该使用纯编码来测试一些特定的极端情况。是否有任何理由需要成为单个正则表达式?
  • @ciencia,anubhava 刚刚编写了正确的正则表达式来完成这项工作。

标签: javascript regex


【解决方案1】:

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

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

RegEx Demo

正则表达式详细信息:

  • \b: 字边界断言
  • (?!\w*([sar])\w*\1):否定前瞻断言我们没有超过一个 [sar] 字母实例
  • (?!(?:\w*t){3}):否定前瞻断言我们没有超过 2 个t 字母
  • [sart]{3,}:匹配 3+ 个包含 [sart] 字符的字符

【讨论】:

  • 它将匹配 'stt'
  • 是的,stt 应该是有效匹配
  • @anubhava 这就是我要找的。非常感谢您的时间和精力
【解决方案2】:

不是一个有趣的答案,但双 t 确实让这变得困难。这可能通过一些复杂的反向引用来实现......但更暴力的解决方案是编写一些代码来选择所有选项,并将它们放入以 | 分隔的捕获组中。

a la: (start|art|tart|tra|trat|...)

绝对不漂亮,但这会起作用。

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多