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