2017-06-28 107 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("', '") + "']";