Javascript 用于拆分用户定义字符串的正则表达式
我必须拆分一个用户定义的字符串,它看起来像这样Javascript 用于拆分用户定义字符串的正则表达式,javascript,regex,Javascript,Regex,我必须拆分一个用户定义的字符串,它看起来像这样 [test1]-[test2]>>[test3]Some Text:[test4]|test:[test199]|some_text:[test0][test100] ["[test1]", "-", "[test2]", ">>", "[test3]", "Some Text:", "[test4]", "|test:", "[test199]", "|some_text:", "[test0]", "[test100]
[test1]-[test2]>>[test3]Some Text:[test4]|test:[test199]|some_text:[test0][test100]
["[test1]", "-", "[test2]", ">>", "[test3]", "Some Text:", "[test4]", "|test:", "[test199]", "|some_text:", "[test0]", "[test100]"]
[test100
最后,我想得到一个js列表,如下所示
[test1]-[test2]>>[test3]Some Text:[test4]|test:[test199]|some_text:[test0][test100]
["[test1]", "-", "[test2]", ">>", "[test3]", "Some Text:", "[test4]", "|test:", "[test199]", "|some_text:", "[test0]", "[test100]"]
[test100
所以我希望文本被[]括号内的变量和不在括号内的所有变量分开
这里的问题是,我只能得到[]方括号内的所有问题的解决方案,或者或多或少的静态解决方案
括号内的所有内容
(\[.*?\])
不完全正确的正则表达式
((\[.*?\]))|([a-zA-Z0-9->:|_ ]*(?!\]))
例如,这不适用于这样的文本
[test1]-[test2]>>[test3]Some Text:[test4]|test:[test199]|some_text:[test0][test100]
["[test1]", "-", "[test2]", ">>", "[test3]", "Some Text:", "[test4]", "|test:", "[test199]", "|some_text:", "[test0]", "[test100]"]
[test100
由于您不关心是否有嵌套括号,因此可以使用
s.split(/(\[[^\][]*])/).filter(Boolean)
(\[[^\][]*])
模式匹配并捕获到组1 a[
,然后是除[
和]
之外的任何0+字符,然后是]
,并使用它将字符串拆分为块,同时将匹配和不匹配的块保存到结果数组中
如果有相邻的块或它位于字符串的开始/结束处,则可能会出现空项,.filter(Boolean)
将其清除
请参阅JS演示:
console.log(
“[test1]-[test2]>>[test3]一些文本:[test4]|测试:[test199]|一些文本:[test0][test100]”
.split(/(\[[^\][]*])/).filter(布尔值)
)
您可以使用正向环视:
str=“[test1]-[test2]>>[test3]一些文本:[test4]| test:[test199]|一些文本:[test0][test100]”
console.log(str.split(/(?是否有嵌套的括号?如果没有,请使用.split(/(\[^\][*])/)).filter(布尔值)
@WiktorStribiżew可能括号周围有括号,例如:[test1]]最好的解决方案是[“[”[”,“[test1],“]”],然后(\[*.]
对你来说甚至部分都不起作用。是的,这是我的问题,我的正则表达式只适用于以下示例:(@str这是一个错误:(我编辑了itThanks以获得您的答案。结果与我需要的一样。我已经接受了另一个解决方案,因为它是在您之前发布的。我将比较并查看我将使用哪个解决方案。请注意,只有Chrome支持lookbehind。