【问题标题】:javascript regex matching 3 digits and 3 lettersjavascript正则表达式匹配3个数字和3个字母
【发布时间】:2013-04-22 22:37:59
【问题描述】:

如何匹配字符串中恰好包含“3个数字和3个字母”的单词?

例如100BLA

var regex = ?;
var string = "word word 100BLA word";
desiredString = string .match(regex);

【问题讨论】:

    标签: javascript regex match


    【解决方案1】:

    \d 匹配一个数字

    [a-zA-Z] 匹配一个字母

    {3} 是精确匹配 3 次重复的量词

    ^ Anchor 匹配字符串的开头

    $ Anchor 匹配字符串的结尾

    因此,如果您使用所有这些新知识,您将得到这样的正则表达式:

    ^\d{3}[a-zA-Z]{3}$
    

    更新:

    由于在我写完答案后输入示例发生了变化,因此更新如下:

    如果您的单词是较大字符串的一部分,则不需要锚点 ^$,而必须使用 word boundaries \b

    \b\d{3}[a-zA-Z]{3}\b
    

    【讨论】:

    • 正如this comment 中提到的那样,这不起作用,因为它匹配输入的开始和结束而不是单词。
    • @MariaIoannidou,我确切地知道我的表达方式匹配。当我回答这个问题时,示例字符串是 var string = "100BLA word"; 而不是 var string = "word word 100BLA word";
    • 不,示例字符串尚未更改。是的,如果匹配不是字符串中的最后一个单词,它会起作用
    • @stema 我没说你不知道:)。虽然它没有被标记为已编辑,但它可能已经被很快地编辑了。我记得还看到另一个输入,我最初的答案也不同。但即使最初的例子也行不通,对吧?
    • 但是输入没有改变;)
    【解决方案2】:

    首字母(不完整)

    var regex = /[0-9]{3}[A-Za-z]{3}/;
    

    编辑 1(不完整)

    var regex = /[0-9]{3}[A-Za-z]{3}\b/; // used \b for word boundary
    

    编辑 2(正确)

    var regex = /\b[0-9]{3}[A-Za-z]{3}\b/; // used \b at start and end for whole word boundary
    

    【讨论】:

    • 试试var str = "Foobar100BLA"; 也会是真的。
    • @stema 你是对的。如果我们想要一个单词匹配,我们也应该在正则表达式的末尾使用单词边界匹配 (\b)。但是使用 ^ 和 $,正如您在 your answer 中所建议的那样,将匹配输入的开始和结束,因此示例字符串不会匹配,而应该匹配。我正在适当地编辑我的答案。
    • 您还需要在正则表达式的开头有一个 wordboundary 否则它在 var string = "word word Foobar100BLA word"; 上仍然返回 true
    • @stema 哦,我不知道,谢谢!
    • 谢谢。对不起,我接受了 Stemas 的回答,因为他首先发布了它
    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 2012-11-10
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多