Javascript 拆分空格和引号上的字符串,保持带引号的子字符串不变
我需要一种方法来拆分空格上的字符串,但保持引用的子字符串完好无损 例如:Javascript 拆分空格和引号上的字符串,保持带引号的子字符串不变,javascript,regex,Javascript,Regex,我需要一种方法来拆分空格上的字符串,但保持引用的子字符串完好无损 例如: Input: str = 'this "is a"test string' Output: [this, is a, test, string] 当我使用: str.match(/\\?.|^$/g).reduce((p, c) => { if(c === '"' || c === "'"){ p.quote ^= 1; }else if(!p.quote && c
Input:
str = 'this "is a"test string'
Output:
[this, is a, test, string]
当我使用:
str.match(/\\?.|^$/g).reduce((p, c) => {
if(c === '"' || c === "'"){
p.quote ^= 1;
}else if(!p.quote && c === ' '){
p.a.push('');
}else{
p.a[p.a.length-1] += c.replace(/\\(.)/,"$1");
}
return p;
}, {a: ['']}).a
它保持引用的子字符串完整,并根据需要在空格上拆分
但是,在所提供的示例中,如果引用的子字符串后面紧跟着一个字母,则无法正确拆分术语。相反,我得到的结果是:
[this, is atest, string]
编辑:
我相信这个问题与其他类似的问题不同,因为它们都没有排除引号,并且在结束引号后没有空格时正确分割术语,比如:“this”是一个“测试字符串”
有很多类似的“分割空格和引号”Q&As等等,它们中的大多数都使用正则表达式解决方案。事实上,您的代码至少可以在中找到(谢谢)
虽然这些解决方案中有一些不包括引号,但如果在结束引号后没有空格分隔符,并且它们都不排除引号并允许缺少空格,那么我只能找到一个有效的解决方案
这也不仅仅是一个简单的调整任何正则表达式的问题。如果您确实将正则表达式更改为使用捕获组,则不再可能使用简单的match
方法。(通常的技巧是在循环中使用exec
。)如果不使用捕获组,则需要在之后执行字符串操作以删除引号
最简单的解决方案是对匹配的数组结果使用map
使用切片
字符串操作方法:
var str='this'是一个“测试字符串”;
var result=str.match(/“[^”]*”|\S+/g).map(m=>m.slice(0,1)=='''”?m.slice(1,-1):m);
控制台日志(结果)代码>可能的@try catch finally副本该副本无效,原因与前一个相同-没有任何内容排除引号。(有趣的是,其中一个答案是OP试图使用的状态机代码。)