我需要用空格分割字符串,但不能在“()”或“[]”中找到空格。我从这里找到了几个类似的问题,但我找不到理想的解决方案。
我要解析的字符串看起来像这样(方括号也可以用常规括号替换):
(1)“有些文字[更多文字]”
(2)“有些文字[更多文字]”
我希望他们像这样分开:
(1)[“Some”,“text”,“[more text]”]
(2)[“Some”,“text [more text]”]
Javascript - divide by spaces unless within brackets - 这个问题非常相似,答案在第一(1)情况下效果很好。但在第二种情况下,它并没有那么好用。拆分后,它看起来像这样:
[“Some”,“text [more”,“text]”]
有没有一种简单的方法来实现我想要的目标?
答案 0 :(得分:1)
这些似乎有效:
1: \[[^\]]+\]|\S+\[[^\]]+\]|\S+
2: \[[^\]]+\]|(\S(\[[^\]]+\])?)+
3: (\S+)?\[[^\]]+\]|\S+
根据Regex Hero,第一个是远远优越的,而Miguel的答案稍微快一些。
答案 1 :(得分:0)
尝试(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)
var a = "Some text [more text]";
var b = "Some text[more text]";
结果是:
a.match(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)
[“某些”,“文字”,“[更多文字]”]
b.match(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)
[“Some”,“text [more text]”]
答案 2 :(得分:0)
使用此正则表达式:
/(\w+)?(\([^\)]*?\)|\[[^\]]*?\])(\w+)?|\w+/g
<强> Samples 强>:
console.log( 'Some(1) text [more text]'.match(regex) );
//Output-> ["Some(1)", "text", "[more text]"]
console.log( '(2) Some text[more text]'.match(regex) );
//Output-> ["(2)", "Some", "text[more text]"]
console.log( '(3 45)Some text[more text]'.match(regex) );
//Output-> ["(3 45)Some", "text[more text]"]