Javascript正则表达式在不使用引号

时间:2016-02-09 15:25:09

标签: javascript regex string

我在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\"

我认为理想情况下我会找到一个标记化器,但如果我能在正则表达式中做到这将是一个主要的头痛解决了:)

感谢

1 个答案:

答案 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>