我有这个正则表达式:
([a-z]+)(?:\.)
。
像这样在Javascript中使用它:
"test.thing.other".split(/([a-z]+)(?:\.)/);
最终给我一个这样的数组:
["", "test", "", "thing", "other"]
。
我不知道为什么将第一个和第三个元素放入该数组中。谁能告诉我我做错了什么?
我有这个正则表达式:
([a-z]+)(?:\.)
。
像这样在Javascript中使用它:
"test.thing.other".split(/([a-z]+)(?:\.)/);
最终给我一个这样的数组:
["", "test", "", "thing", "other"]
。
我不知道为什么将第一个和第三个元素放入该数组中。谁能告诉我我做错了什么?
根据您的问题和评论“捕获 az 直到一段时间”,我相信您应该像这样使用 String.match :
arr = "test.thing.other".match(/[a-z]+(?=\.)/g);
给出:
["test", "thing"]
括号是原因。这是MDN 上string.split
所说的:
如果
separator
是包含捕获括号的正则表达式,则每次匹配分隔符时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中。
他们还警告说:
但是,并非所有浏览器都支持此功能。
所以这个结果可能不一致。如果您只想按表达式的内容进行拆分,请删除括号:
>> 'test.thing.other'.split(/[a-z]+\./)
["", "", "other"]
这也可能不是您想要的,而是根据您的表达方式直观预期的结果。
如果你想按点分割,那么你需要在正则表达式中准确地提供:一个点。
>> 'test.thing.other'.split(/\./)
["test", "thing", "other"]