2017-06-28 75 views
0

所以,如果我有一个字符串,如:Javascript字符串分割

'boss: "Person 1" AND occupation: "Engineer"'

有没有一种方法,我可以在字符串分割成一个数组像这样:

['boss:', '"Person 1"', 'AND', 'occupation:', '"Engineer"']

我有很多不同的正则表达式分裂和多个参数分裂,我似乎无法实现这一点。有任何想法吗?

FYI:是的,我想在周围人1和工程师报价离开,并保持在任何空间是报价之间

谢谢!

+1

你尝试过什么?你卡在哪里? – Cruiser

回答

2

var input = 'boss: "Person 1" AND occupation: "Engineer"'; 
 

 
console.log(input.match(/"[^"]*"|[^ ]+/g)); 
 

 
// Output: 
 
// [ 'boss:', '"Person 1"', 'AND', 'occupation:', '"Engineer"' ]

说明

要匹配两种工作:

  1. 万物而不包含空格(空格,因为不同的术语)。
  2. 引号内容(允许空格)。这里

正则表达式由两个部分组成:

  1. "[^"]*" - 这是一个双引号,后跟任意数量的非双引号字符,紧接着又双引号匹配。
  2. [^ ]+ - 这匹配一个或多个非空格字符。

这两个与一个管道(|)相结合,这意味着“或”。它们一起匹配你想找到的两种类型的东西。

+0

这里的另一个答案指出,正则表达式的第一部分可以是'“。*?”'代替。我认为这也很好。 – smarx

0

如果console.log打印一个数组,它会用撇号围绕每个字符串元素,因此您只能在控制台输出中看到撇号。

如果你想获得一个字符串格式化你想要的方式, 使用下面的脚本:

var str = 'boss: "Person 1" AND occupation: "Engineer"'; 
var pat = /"[^"]+"|\S+/g; 
var res1 = str.match(pat); 
var result = "['" + res1.join("', '") + "']";