我希望用空格将字符串(任何字符串)拆分成数组,最好使用split()
方法。但是,我希望忽略引号中的空格。
举个例子:
'word "words in double quotes"'
它应该成为一个数组:
[
'word',
'words in double quotes'
]
我看了类似的答案,他们通常给出一个数组:
[
'word',
'"words in double quotes"'
]
这不是我想要的。我不希望在数组元素中添加引号。
我可以使用什么正则表达式?
答案 0 :(得分:0)
我认为单独使用String.prototype.split
可以实现你想要的东西,因为它的使用很可能导致结果数组中出现空字符串;这就是你给的字符串。如果您需要针对您的问题的一般解决方案,我相信split
根本不起作用。
如果您的目标是产生与实际字符串无关的相同结果,我建议您使用String.prototype.match
,[].map
和String.prototype.replace
的组合,如下所示:
<强>代码:强>
var
/* The string. */
string = 'apples bananas "apples and bananas" pears "apples and bananas and pears"',
/* The regular expression. */
regex = /"[^"]+"|[^\s]+/g,
/* Use 'map' and 'replace' to discard the surrounding quotation marks. */
result = string.match(regex).map(e => e.replace(/"(.+)"/, "$1"));
console.log(result);
使用的正则表达式的说明:
"[^"]+"
:在两个引号内捕获任何字符序列(至少1个),但引号除外。|
:逻辑或。[^\s]+
:捕获任何非空白字符序列(至少1)。g
:全局标志 - 匹配所有事件的指令。答案 1 :(得分:-1)
我希望这是你正在寻找的东西:
var words = 'word "words in double quotes" more text "stuff in quotes"';
var wordArray = words.match(/"([^"]+)"|[^" ]+/g);
for(var i=0,l=wordArray.length; i<l; i++){
wordArray[i] = wordArray[i].replace(/^"|"$/g, '');
}
console.log(wordArray);
&#13;
答案 2 :(得分:-1)
使用regexp会显着影响代码的可读性和可维护性。特别是当你试图解决现有的限制时(比如,缺乏外观)。