如何通过不直接在相同类型的字符前面的字符拆分字符串?

DRA*_*RAB 12 javascript regex

假设我有一个字符串:"We.need..to...split.asap".我想要做的是用分隔符分割字符串.,但我只想按第一个 分割,..在后续标记中包含任何重复的s.

预期产量:

["We", "need", ".to", "..split", "asap"]
Run Code Online (Sandbox Code Playgroud)

在其他语言中,我知道这可以通过后视来实现,/(?<!\.)\./但遗憾的是Javascript不支持这样的功能.

我很想知道你对这个问题的答案.也许有一种巧妙的使用前瞻性目前可以避开我?

我正在考虑反转字符串,然后重新转换令牌,但这似乎对我所追求的东西太多了......加上争议:你如何在JavaScript中反转字符串?

谢谢您的帮助!

Ted*_*opp 5

以下是来自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)

(我认为这个正则表达式是丑陋的,并欢迎改进.)