我正在尝试使用JavaScript正则表达式检查字符串中是否有与某个字母集(后跟5或6个数字)匹配的任何内容。例如,如果字符串是'MyValue12345 blah blah MyValue123456 blah MyValue222221'
,则它应返回匹配项['MyValue12345', 'MyValue123456', 'MyValue222221']
。我是RegEx新手(很明显),我的表情接近了,但不完全是我想要的...
这是我的第一次尝试:
var str = 'MyValue12345 blah blah MyValue123456 blah MyValue222221';
var matchArr = str.match(/MyValue\d\d\d\d\d|MyValue\d\d\d\d\d\d/gi);
matchArr
然后等于['MyValue12345', 'MyValue123456', 'MyValue22222']
,但是MyValue22222
的最后一个值不是我想要的,我想说{{1}的完整表达}。我知道有更好的方法可以做到这一点,但我正在努力做到……有什么想法吗?
答案 0 :(得分:1)
使用quantifier range {n,m}(regex101):
var str = 'MyValue12345 blah blah MyValue123456 blah MyValue222221';
var matchArr = str.match(/MyValue\d{5,6}/gi);
console.log(matchArr);
答案 1 :(得分:1)
正则表达式尝试应用您的|
alternative的第一个模式,当匹配时即为结果。仅当不匹配时,它才会尝试第二种选择。因此,您可以将两者互换以使其工作:
/MyValue\d\d\d\d\d\d|MyValue\d\d\d\d\d/gi
但是,这是非常重复的-最好在差异之间使用group:
/MyValue\d\d\d\d\d(?:\d|)/gi
// ^^^^^^^ one digit or none
您可以使用?
modifier来语法上将其缩短,该匹配项将匹配“一个或没有”:
/MyValue\d\d\d\d\d\d?/gi
// ^^^ one digit or none
最后但并非最不重要的一点是,您将要看看repetition syntax:
/MyValue\d{5}\d?/gi
// ^^^^^ five digits
/MyValue\d{5,6}/gi
// ^^^^^ five or six digits