如何在Javascript中拆分带双方括号的()字符串

如何在Javascript中拆分带双方括号的()字符串,javascript,Javascript,我想改变这个 let str=“汤姆从[[他的]]家离开” 到 array=[“tomleftfrom”、“[[his]]、“home”] 我试过这样做 array = []; c = 0; array = str.split(/([[[]]])/).filter(Boolean).forEach(e => e == '[[' ? c++ : e == ']]' ? c-- : c > 0 ? array.push('[[' + e + ']]') : array.push(e)

我想改变这个

let str=“汤姆从[[他的]]家离开”

array=[“tomleftfrom”、“[[his]]、“home”]

我试过这样做

array = []; c = 0;
array = str.split(/([[[]]])/).filter(Boolean).forEach(e => 
e == '[[' ? c++ : e == ']]' ? c-- : c > 0 ? array.push('[[' + e + ']]') : array.push(e) 
); 

console.log(array)
试试这个

str.split(/(\[\[.+?\]\])/).filter(Boolean)
就这样,不需要额外的执行

关于你的代码:

1) 正则表达式中的方括号前面需要反斜杠,因为它们是表达式语法的一部分

2) forEach只是在元素上迭代,它返回未定义的,所以当您将值赋给数组时,您的代码完全没有意义,所以无论您使用变量数组做了什么,您都将被初始化,在这种情况下使用map函数,它创建一个新数组,转换现有数组的值

array = str.split(/whatever/).filter(Boolean).map(e => 
e == '[[' ? c++ : e == ']]' ? c-- : c > 0 ? '[[' + e + ']]' : e 
); 
试试这个

str.split(/(\[\[.+?\]\])/).filter(Boolean)
就这样,不需要额外的执行

关于你的代码:

1) 正则表达式中的方括号前面需要反斜杠,因为它们是表达式语法的一部分

2) forEach只是在元素上迭代,它返回未定义的,所以当您将值赋给数组时,您的代码完全没有意义,所以无论您使用变量数组做了什么,您都将被初始化,在这种情况下使用map函数,它创建一个新数组,转换现有数组的值

array = str.split(/whatever/).filter(Boolean).map(e => 
e == '[[' ? c++ : e == ']]' ? c-- : c > 0 ? '[[' + e + ']]' : e 
); 

我不清楚您想要什么以及split的用法?你想用替换吗?替换(/(.*)([[.]])(.*)/,$1+':“+$2+”:“+$3),在编辑{to[ignore replace^^之后,你应该更倾向于可读性而不是简洁性。嵌套三元运算符是一个大禁忌。你想要什么,拆分的用法我不清楚?你想使用替换吗?在编辑{to}之后,替换(/(.*)([.]])([[.]])(.*)/,$1+:“+$2+:+$3)。”[ignore replace^^^你应该更倾向于可读性而不是简洁性。嵌套三元运算符是一个大禁忌。@DhananjaiPai,我没有在方括号中添加反斜杠,现在应该这样做了work@DhananjaiPai,我真丢脸,但我不记得怎么让它变懒了
.split(/(\[\[.+?\]\])/)
@DhananjaiPai,是的,就像这是完美的一样,我根据it@carte,请阅读我的更新,其中我指出了您代码中的一些缺陷,这可能对您有所帮助you@DhananjaiPai,我没有在方括号中添加backskash,现在它应该work@DhananjaiPai,我真丢脸,但我不记得怎么让它变懒了
.split(/(\[\[.+?\]\])/)
@DhananjaiPai,是的,就像这是完美的一样,我根据it@carte,请阅读我的更新,其中我指出了您代码中的一些缺陷,这可能会对您有所帮助