JavaScript正则表达式问题

JavaScript正则表达式问题,javascript,regex,Javascript,Regex,你们能帮我弄清楚吗?我有以下JavaScript代码片段: pattern = new RegExp('^bla*a', 'i'); console.debug(pattern.exec('blatr')); 运行此命令后,输出为[“bla”]。 我解释这个正则表达式的方式是:给我找一个以“bla”开头,以“a”结尾的字符串,中间有尽可能多的字符。在本例中,“blatr”不应该与正则表达式匹配,但它确实匹配。 我做错了什么 谢谢。表达式中的a*与前面的字符a匹配了零次或多次,而不是字符串bla

你们能帮我弄清楚吗?我有以下JavaScript代码片段:

pattern = new RegExp('^bla*a', 'i');
console.debug(pattern.exec('blatr'));
运行此命令后,输出为[“bla”]。 我解释这个正则表达式的方式是:给我找一个以“bla”开头,以“a”结尾的字符串,中间有尽可能多的字符。在本例中,“blatr”不应该与正则表达式匹配,但它确实匹配。 我做错了什么


谢谢。

表达式中的a*与前面的字符a匹配了零次或多次,而不是字符串bla。你需要用括号。试试这个:

new RegExp('(^bla){1}.+a$', 'i');
编辑:在匹配字符串开头的表达式中使用+没有意义。另外,由于您说要匹配blaa之间的任何字符,因此需要在后面使用a+

EDIT:Ahem,似乎一个答案也不需要括号,正如其他答案所示。自我提示:停止设计你的正则表达式,并在发布答案之前测试它们:P这很好:

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

表达式中的a*与前面的字符a匹配了零次或多次,而不是字符串bla。你需要用括号。试试这个:

new RegExp('(^bla){1}.+a$', 'i');
编辑:在匹配字符串开头的表达式中使用+没有意义。另外,由于您说要匹配blaa之间的任何字符,因此需要在后面使用a+

EDIT:Ahem,似乎一个答案也不需要括号,正如其他答案所示。自我提示:停止设计你的正则表达式,并在发布答案之前测试它们:P这很好:

new RegExp('^bla.+a$', 'i');
“*”表示前面字符的{0、}或“0或更多”。你想做的应该是

^bla.*a$
编辑:遗漏了前面问题的“以'a'结尾”部分。

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

^bla.*a$

编辑:遗漏了前面问题的“以‘a’结尾”部分。

您的正则表达式匹配行开头的字母
bl
,后跟零个或多个
a
,然后是一个
a
(相当于一个或多个
a
),后面可能有字符<代码>布拉特与此匹配

要做您想做的事情(如果我理解正确,请使用:

“^bla.*a”


*
意味着将前面的字符重复零次或多次

您的正则表达式匹配行开头的字母
bl
,然后是零个或多个
a
,然后是一个
a
(相当于一个或多个
a
)后面可能有字符。
blatr
与此匹配

要做您想做的事情(如果我理解正确,请使用:

“^bla.*a”


*
表示重复上一个字符零次或多次

只需将$附加到此正则表达式的结尾,否则它也会匹配“blatradd”。遗漏了问题中的该部分。更正:)只需将$附加到此正则表达式的结尾,否则它也会匹配“blatradd”。遗漏了问题中的该部分。更正:)为什么我的答案没有被选中?(当然,我想知道纯粹是为了个人学术分析)。我的答案没有被选中的原因是什么?(当然,我想知道这些纯粹是为了个人学术分析)。