2009-08-27 47 views
0

你们能帮我弄清楚这个吗?我有以下的JavaScript代码片段:JavaScript RegExp问题

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

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

谢谢。

+0

任何原因,我的答案是不(当然,我想纯粹知道个人学术分析) – aditya 2009-09-07 10:24:18

回答

0

一个*在表达一个零次或多次匹配前面的字符,不是字符串BLA。你需要使用括号。试试这个:

new RegExp('(^bla){1}.+a$', 'i'); 

编辑:在一个字符串的开头相匹配的表达式中使用+号点。此外,既然你说你想匹配blaa之间的任何字符,你需要使用+后的+号。

编辑:咳咳,看来一个人不需要括号无论是作为其他的答案显示。注意自己:在发布之前停止过度设计您的RegEx并测试您的答案。 :P这很好:

new RegExp('^bla.+a$', 'i'); 
4

'*'表示前面的字符的{0,}或“0或更多”。你想要做什么应该是

^bla.*a$ 

编辑:错过了的问题,早期部分“与‘A’结束”。

+1

只需追加$到这个正则表达式的结尾,否则它也会匹配“blatraddd” – Kamarey 2009-08-27 10:28:32

+0

错过了问题中的那个部分。 – aditya 2009-08-27 12:51:58

0

你的正则表达式匹配的字母bl在该行之后的零个或更多a的开始的,然后一个a(其等同于一个或多个a的)与有可能以下的字符。 blatr匹配。

做你想要做什么(如果我理解正确的话,可以使用:

'^bla.*a'

*方法重复前面的字符零次或多次