Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于拆分用户定义字符串的正则表达式_Javascript_Regex - Fatal编程技术网

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。