令牌由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);
答案 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));