不知道为什么我的正则表达式抓住了一些空白项目

时间:2013-03-11 15:55:38

标签: regex

我有这个正则表达式: ([a-z]+)(?:\.)

在这样的Javascript中使用它:
"test.thing.other".split(/([a-z]+)(?:\.)/);最终给了我一个这样的数组:
["", "test", "", "thing", "other"]
我不知道为什么第一个和第三个元素被放入该数组中。谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:3)

根据您的问题和评论“捕获a-z直到一段时间”我相信您应该更喜欢使用String.match:

arr = "test.thing.other".match(/[a-z]+(?=\.)/g);

给出:

["test", "thing"]

答案 1 :(得分:2)

括号是原因。以下是MDN says on string.split所说的内容:

  

如果separator是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。

他们也提醒:

  

但是,并非所有浏览器都支持此功能。

所以这个结果可能不一致。如果您只想按表达式的内容进行拆分,请删除括号:

>> 'test.thing.other'.split(/[a-z]+\./)
["", "", "other"]

这可能也不是你想要的,但是根据你的表达,这是直观的预期结果。

如果要按点分割,则需要在正则表达式中提供完全相同的内容:点。

>> 'test.thing.other'.split(/\./)
["test", "thing", "other"]