一个JavaScript RegExp问题

时间:2009-08-27 09:58:00

标签: javascript regex

你能帮助我解决这个问题吗?我有以下JavaScript代码段:

pattern = new RegExp('^bla*a', 'i');
console.debug(pattern.exec('blatr'));

运行后,输出为[“bla”]。 我解释这个正则表达式的方法是这样的:找到一个以'bla'开头并以'a'结尾的字符串,中间有多个字符。在这种情况下,'blatr'不应该与正则表达式匹配,但确实如此。 我做错了什么?

感谢。

3 个答案:

答案 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'表示重复前一个字符零次或多次