我在JS字符串中有一个表达式,我想把它拆分成标记。该字符串可以包含任何符号或字符(实际上是字符串表达式)
我一直在使用
expr.split(/([^\"]\S*|\".+?\")\s*/)
但是当我在引号之外得到一个文本符号时,它会错误地分裂。
e.g。当
expr = "Tree = \"\" Or Tree = \"hello cruel world\" + \" and xyz\""
然后OR与下面的字符串混合在一起。
分裂\ b似乎是要走的路(是吗?)但我不知道如何将字符串保持在引号中。理想情况下,我会得到:
Tree
=
\"\"
Or
Tree
=
\"Hello cruel world\"
+
\" and xyz\"
我认为理想情况下我会找到一个标记化器,但如果我能在正则表达式中做到这将是一个主要的头痛解决了:)
感谢
答案 0 :(得分:1)
更简单的方法是使用.match()
代替.split()
,并使用替换匹配引号或非空白字符组之间的字符:
/"[^"]+"|\S+/g
说明:
"[^"]+"
- 在双引号之间匹配一个或多个非"
个字符.. |
- 替代\S+
- ...或匹配一个或多个非空白字符的组用法:
var string = 'Tree = \"\" Or Tree = \"hello cruel world\" + \" and xyz\"';
var result = string.match(/"[^"]+"|\S+/g);
document.querySelector('pre').textContent = JSON.stringify(result, null, 4);
<pre></pre>