用于分割字符串的正则表达式,避免使用双记号

regular expression to split string avoiding double tokens

本文关键字:记号 分割 字符串 正则表达式 用于      更新时间:2023-09-26

为了将字符串值拆分为使用javascript的数组,我需要使用分隔符进行拆分。重复分隔符表示数组中的子值,例如

abc + ! +; def + + +, 123 + ! ! ! +; xyz

应该分割成abc, [def, 123], xyz

我最接近的表达式是((?:+!(?!+!))+';|$),但考虑到它可能是我第一次开始的表达式,因为从那时起我经历了这么多的变化。

可能有一个显而易见的答案,但在似乎永恒之后,我现在被难住了。我看了看regex来解析带有转义字符的字符串,和类似的文章,虽然不是相同的问题,但基本上是停止了想法。

在某个地方,有人会比我更了解正则表达式,希望他们有一个答案

我通过使用.split()和这个基本模式得到了这个工作:

'b'+!'+;'b

然后:

'b'+!'+!'+;'b

等等。您需要将其转换为递归函数,但是我制作了一个基本的JSFiddle来帮助您入门。首先,使用第一个表达式拆分字符串。然后我们通过添加!'+来创建新的表达式(这可以很容易地动态完成)。现在我们可以循环遍历初始数组,看看字符串是否匹配我们的新表达式,以及是否再次拆分它。

var string = 'abc+!+;def+!+!+;123+!+;xyz',
    data = string.split(/'b'+!'+;'b/);
var regex = /'b'+!'+!'+;'b/
for(var i = 0; i < data.length; i++) {
    var string = data[i];
    if(string.match(regex)) {
        data[i] = string.split(regex);
    }
}
console.log(data);
// ["abc", ["def", "123"], "xyz"]

我把使它成为递归函数的任务留给了OP.如果你需要一些指导,我可以试着提供一些更多的见解。