假设我有一个字符串:"We.need..to...split.asap"
.我想要做的是用分隔符分割字符串.
,但我只想按第一个 分割,.
并.
在后续标记中包含任何重复的s.
预期产量:
["We", "need", ".to", "..split", "asap"]
Run Code Online (Sandbox Code Playgroud)
在其他语言中,我知道这可以通过后视来实现,/(?<!\.)\./
但遗憾的是Javascript不支持这样的功能.
我很想知道你对这个问题的答案.也许有一种巧妙的使用前瞻性目前可以避开我?
我正在考虑反转字符串,然后重新转换令牌,但这似乎对我所追求的东西太多了......加上争议:你如何在JavaScript中反转字符串?
谢谢您的帮助!
以下是来自guest271314的答案的变体,它处理两个以上的连续分隔符:
var text = "We.need.to...split.asap";
var re = /(\.*[^.]+)\./;
var items = text.split(re).filter(function(val) { return val.length > 0; });
Run Code Online (Sandbox Code Playgroud)
它使用详细信息,如果拆分表达式包含捕获组,则捕获的项目将包含在返回的数组中.这些捕获组实际上是我们唯一感兴趣的东西; 标记都是空字符串,我们将其过滤掉.
编辑:不幸的是,这可能有一个小错误.如果要拆分的文本以分隔符开头,则将包含在第一个标记中.如果这是一个问题,可以通过以下方式解决:
var re = /(?:^|(\.*[^.]+))\./;
var items = text.split(re).filter(function(val) { return !!val; });
Run Code Online (Sandbox Code Playgroud)
(我认为这个正则表达式是丑陋的,并欢迎改进.)