你能帮助我解决这个问题吗?我有以下JavaScript代码段:
pattern = new RegExp('^bla*a', 'i');
console.debug(pattern.exec('blatr'));
运行后,输出为[“bla”]。 我解释这个正则表达式的方法是这样的:找到一个以'bla'开头并以'a'结尾的字符串,中间有多个字符。在这种情况下,'blatr'不应该与正则表达式匹配,但确实如此。 我做错了什么?
感谢。
答案 0 :(得分:4)
'*'表示前一个字符的{0,}或“0或更多”。你要做的应该是
^bla.*a$
编辑:错过了早先问题的“结尾”这一部分。
答案 1 :(得分:0)
表达式中的 a * 匹配前一个字符 a 零次或多次,而不是字符串 bla 。你需要使用括号。试试这个:
new RegExp('(^bla){1}.+a$', 'i');
编辑:在与字符串开头匹配的表达式中使用+没有意义。此外,既然你说要匹配 bla 和 a 之间的任何字符,你需要在。之后使用+。
编辑:咳咳,似乎一个人不需要括号,正如其他答案所示。自我注意:停止过度设计您的RegEx并在发布之前测试您的答案。 :P这很好:
new RegExp('^bla.+a$', 'i');
答案 2 :(得分:0)
您的正则表达式匹配行开头的字母bl
,后跟零个或多个a
,然后一个a
(相当于一个或多个{{1}随着可能的字符跟随它。 a
与之匹配。
做你想做的事(如果我理解正确,请使用:
blatr
'^bla.*a'
表示重复前一个字符零次或多次