4

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

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

4

2 回答 2

3

根据您的问题和评论“捕获 az 直到一段时间”,我相信您应该像这样使用 String.match :

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

给出:

["test", "thing"]
于 2013-03-11T16:11:25.377 回答
2

括号是原因。这是MDN 上string.split所说的:

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

他们还警告说:

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

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

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

这也可能不是您想要的,而是根据您的表达方式直观预期的结果。

如果你想按点分割,那么你需要在正则表达式中准确地提供:一个点。

>> 'test.thing.other'.split(/\./)
["test", "thing", "other"]
于 2013-03-11T16:00:14.730 回答