如何在javascript中用带引号的字符串标记字符串?

时间:2018-07-17 17:54:15

标签: javascript regex

令牌由1个或多个空格分隔。 “带引号的字符串”是单个标记。 其他不以引号开头的内容都是令牌。 我尝试并失败了:

var tokenre = /"[^"]*"|[^"]\S+|\s\s*/g;

例如,我想要此输入

[4,4]  "This is fun"
 2  2 +
 #

标记为

['[4,4]', '  ', '"This is fun"', '\n ', '2', '  ', '2', ' ', '+', '\n ', '#']

可以使用以下代码进行测试:

var result = null;
do {
    result = tokenre.exec (program);
    console.log (result);
} while (result != null);

1 个答案:

答案 0 :(得分:2)

似乎您想将字符串标记为空白和非空白char块,而且还希望将"..."像子字符串一样分隔在引号中并分隔成单独的元素。

您可以使用

s.match(/"[^"]*"|\S+|\s+/g)

请参见regex demo

详细信息

  • "[^"]*"-一个",然后是除引号以外的任意0+个字符,然后是"注意:以匹配常规转义序列,您需要将其替换为"[^"\\]*(?:\\[\s\S][^"\\]*)*"
  • |-或
  • \S+-1个以上非空格字符
  • |-或
  • \s+-1个以上的空格字符。

JS演示:

var s = "[4,4]  \"This is fun\"\n2  2 +\n#";
console.log(s.match(/"[^"]*"|\S+|\s+/g));