1

我试图让这个正则表达式返回,并且只返回"flies a"

s = 'test <!-- flies are little birds --> end';
alert(s.match(/f(.*)a/));

为什么会返回

flies a
lies

我怎样才能使 f 和一个强制性的?

谢谢

4

3 回答 3

4

.match返回一个数组。第一个元素是整个匹配的文本,其他元素是捕获组的内容。您有一个捕获组,因此第二个元素是它捕获的文本。

删除组或忽略数组中的其他元素。在任何情况下,您都必须访问第一个:

var match = s.match(/f(.*)a/)[0]; // or /f.*a/

PS:alert是个不好的调试工具,用console.logorconsole.dir来代替。

于 2013-01-09T13:06:49.177 回答
2

不要放在括号里。

alert(s.match(/f.*a/));

方括号创建一个捕获组,让您可以指定您对匹配的特定部分感兴趣。在这种情况下,您对整个事物感兴趣,因此您不需要任何括号。

于 2013-01-09T13:06:42.823 回答
0

只需删除括号或将整个表达式放入额外的括号中:

s.match(/f.*a/)[0]; 或者 s.match(/(f(.*)a)/)[1];

于 2013-01-09T13:08:02.263 回答