Javascript 用于拆分字符串的正则表达式,避免使用双标记

Javascript 用于拆分字符串的正则表达式,避免使用双标记,javascript,arrays,regex,string,split,Javascript,Arrays,Regex,String,Split,为了使用javascript将字符串值拆分为数组,我需要使用分隔符进行拆分。重复的分隔符表示数组中的子值,例如 abc+!+;def+!+!+;123+!+;xyz 应分为abc、[def,123]、xyz 我最接近的表达式是((?:+!(?!+!)+\ |$),但想想看,这可能是我第一次使用的表达式,因为从那以后我经历了很多变化 也许有一个显而易见的答案,但在经历了似乎是永恒的事情之后,我现在被难住了。我看了一看,和类似的文章虽然不一样的问题很接近,但基本上停了下来,有了想法 在某些地方,有人

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

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

应分为abc、[def,123]、xyz

我最接近的表达式是((?:+!(?!+!)+\ |$),但想想看,这可能是我第一次使用的表达式,因为从那以后我经历了很多变化

也许有一个显而易见的答案,但在经历了似乎是永恒的事情之后,我现在被难住了。我看了一看,和类似的文章虽然不一样的问题很接近,但基本上停了下来,有了想法


在某些地方,有人会比我更了解正则表达式,并希望他们能找到答案。

我通过使用
.split()
实现了这一点:

然后:

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

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"]
var字符串='abc+!+;def+!+!+;123+!+;xyz',,
data=string.split(/\b\+!\+;\b/);
var regex=/\b\+!\+!\+\b/
对于(变量i=0;i

我将把使其成为递归函数的任务留给OP。如果您需要一些指导,我可以尝试提供更多的见解。

您必须解释原始字符串的基本语法。这些分隔符的规则是什么?如果您从您想要结束的数据结构开始(带有子数组的数组),那么您将遵循什么过程来生成字符串?我同意。例如,第二组中的数字…将始终是数字或字母和数字。我想这适用于所有这些子集。这里更大的模式是什么。也许您可以抛出几个示例字符串?该字符串来自外部源,因此无法更改语法。基本上+!和+;是终止符号。+!+;这是一个层次。在整个短语中,其他级别的前缀是另一个+!所以+!+!+;是该短语中的一个子级别,+!+!+!+;是一个子级别,依此类推。
+
是一个特殊字符,因此它前面必须有一个反斜杠<代码>
不是一个特殊的字符,所以它不需要反斜杠:
((?:\+!(?!\+!)\+;$)
哦,顺便问一下,你为什么要写管道
?值将是字母数字,也可能是符号-这是用户输入的,所以不能保证标点符号等也在里面。
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"]