JavaScript匹配返回匹配加空字符串

时间:2014-08-10 20:24:36

标签: javascript regex

看起来有点像一个愚蠢的问题,但查看所有的MDN文档,我不知道为什么会发生这种情况。

我的匹配不仅会返回句子中的单词,还会返回空字符串,每次匹配都会返回一个。

var input = "This is a something";
input.match(/[a-z0-9]*/gi); # ["This", "", "is", "", "a", "", "something", ""]

即使是单个单词也会发生这种情况。

var input = "This";
input.match(/[a-z0-9]*/gi); # ["This", ""]

我也试过添加一个单词边界(\ b),但它根本没用。谁能告诉我这里发生了什么?我只想匹配句子中的所有单词。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用+,但对于您的用例(匹配句子中的所有单词),您可能最好使用拆分。

var input = "This is a something";
input.split(' '); // ["This", "is", "a", "something"]

在这种情况下,看起来分裂也是你正在寻找的东西:

input = "words with a-hyphen";
input.split(' '); // ["words", "with", "a-hyphen"]
input.match(/[a-z0-9]+/gi); //["words", "with", "a", "hyphen"]

如果需要,您可以随时使用匹配

答案 1 :(得分:0)

回答"为什么"问题,如果你有一个允许空匹配的量词,如*?,并且当前位置没有匹配的字符,则regex认为空字符串是有效匹配,推送它进入比赛数组并从下一个位置继续。例如,

"a b".match(/\w*/g)

返回

["a", "", "b", ""]

在这里,"a"匹配位置0,""位于pos 1等(记住,正则表达式"位置"位于字符之间,就像标准文本光标一样)

这种行为的另一个相当病态的例子是

"abc".match(/\W?/g)

返回三个空字符串。

答案 2 :(得分:0)

使用自己的正则表达式:

var input = "This is a something";
input.match(/[a-z0-9]*/gi); # ["This", "", "is", "", "a", "", "something", ""]

您应该将*量词更改为+

var input = "This is a something";
input.match(/[a-z0-9]+/gi); ==> will generate # ["This", "is", "a", "something"]