如何在JavaScript中按两个分隔符分割字符串?

11
我知道如何使用多个分隔符拆分字符串,但我不知道如何将一个字符串拆分成一个数组,在两个字符之间。因此:
var myArray = "(text1)(text2)(text3)".split(???)
//=> myArray[0] = "text1", myArray[1] = "text2", myArray[2] = "text3"

我应该输入什么内容在“???”中?或者我应该使用不同的方法吗?

将")("作为分隔符是行不通的,因为我想要使用多种分隔符(例如">")来分割数组,这样列出每种可能的分隔符组合非常不切实际。

2个回答

13
.split(/[()]+/).filter(function(e) { return e; });

请查看此演示


8
请提供解释,否则此答案并不特别有帮助。 - Madbreaks
1
我认为代码已经说明了一切。这正是我所寻找的。我们还可以使用"(text1)(text2)(text3)".split(/[()]+/).filter(String);来摆脱那个讨厌的空字符串。 - SoEzPz

2
使用JavaScript在不丢失任何字符的情况下在特定字符之间进行拆分是不可能的,因为您需要使用回溯(这是不受支持的)。 但是,由于您似乎想要括号内的文本,而不是拆分,因此您可以只匹配不包含括号的最长可能字符串:
myArray = "(text1)(text2)(text3)".match(/[^()]+/g)

这个回答是最符合 OP 想要的行为的(不是简单的字符串分割),但对于例如 "(text(1)(text(2)" 这样的情况会失败。你也可以匹配开括号,然后将它们映射出来;.match(/\([^)]+/g).map(function (e) {return e.slice(1);}); - Paul S.
@PaulS 当然,但那似乎是无效的。而且具有正确嵌套的内容也无法匹配。我的意思是,为什么要支持 (text(1)(text(2) 而不是 (1)text)(2)text) 或者 (te(1)xt)(te(2)xt) - Martin Ender
没错。我一直在想如何在不需要循环的情况下完成所有这些操作,但是第二个 ( 明显不会结束该部分,而第二个 ) 可能会。虽然这并不是世界上最大的问题。 - Paul S.
@PaulS。允许任意嵌套是世界上最大的问题,如果你想用JavaScript正则表达式来解决它 ;) - Martin Ender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接