按空格拆分字符串但忽略引号中的空格

时间:2018-01-08 00:07:53

标签: javascript regex

我希望用空格将字符串(任何字符串)拆分成数组,最好使用split()方法。但是,我希望忽略引号中的空格。

举个例子:

'word "words in double quotes"'

它应该成为一个数组:

[
  'word',
  'words in double quotes'
]

我看了类似的答案,他们通常给出一个数组:

[
  'word',
  '"words in double quotes"'
]

这不是我想要的。我不希望在数组元素中添加引号。

我可以使用什么正则表达式?

3 个答案:

答案 0 :(得分:0)

我认为单独使用String.prototype.split可以实现你想要的东西,因为它的使用很可能导致结果数组中出现空字符串;这就是你给的字符串。如果您需要针对您的问题的一般解决方案,我相信split根本不起作用。

如果您的目标是产生与实际字符串无关的相同结果,我建议您使用String.prototype.match[].mapString.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)

我希望这是你正在寻找的东西:

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:-1)

  1. 将初始字符串拆分为&#34;
  2. 按空格
  3. 分割#1结果中的每个奇数项目

    使用regexp会显着影响代码的可读性和可维护性。特别是当你试图解决现有的限制时(比如,缺乏外观)。