2017-11-10 110 views
-3

下面是我負責的一個javascript要求:
給出了這樣的字符串:的Javascript:斯普利特和記號化提供的字符串

「 [ condition12 (BRAND) IN 'Beats by Dr. Dre & D\’Silva of type Band’ of type 'IDENTIFIER_STRING’ ] 」 

我要來標記和提取:

- condition12 
- BRAND 
- IN 
- Beats by Dr. Dre & D\’Silva of type Band 
- IDENTIFIER_STRING 

這裏的我正在考慮執行的算法:

  • 移除第一&最後方括號:.trim()片(1,-1)
  • 刪除的「類型」
  • 使用空間(忽略多次出現)分割字符串的最後一個匹配:.split(/\ S + /克))
  • 除去從最後數組元素中的第一&最後單引號(即會包含「IDENTIFIER_STRING」或類似)
  • 從主串,firstIndexOf之間創建子(「'」)和lastIndexOf('類型')&修剪它以獲得'節拍博士Dre & D'席爾瓦類型樂隊'

現在的問題,你所有的專家,有沒有更好的方法來處理這個:)?

在此先感謝!

〜VS

回答

0

你可以得到所有你想要與一個正則表達式:

str = " [ condition12 (BRAND) IN 'Beats by Dr. Dre & D\'Silva of type Band' of type 'IDENTIFIER_STRING' ] "; 
matches = str.match(/^\s*\[\s*(.*?)\s+\((.*?)\)\s+(.*?)\s+'(.*?)'\s+.*?'(.*?)'\s*\]\s*$/); 

結果:

matches[1]: "condition12" 
matches[2]: "BRAND" 
matches[3]: "IN" 
matches[4]: "Beats by Dr. Dre & D'Silva of type Band" 
matches[5]: "IDENTIFIER_STRING" 
+0

真棒,作品像一個魅力!做得好! – user2793354

0

使用一個正則表達式!你感興趣的值將在匹配[1]到匹配[5]。

您可能需要調整此正則表達式,具體取決於哪些字符出現在各種標記中。 (例如,它假定有一些空白,那麼條件就是更多的空白,如果條件中有空白則它會中斷)。你可以制定出正則表達式here

var str = "[ condition12 (BRAND) IN 'Beats by Dr. Dre & D\'Silva of type Band' of type 'IDENTIFIER_STRING' ]"; 
 
var re = /\[\s+(\S+)\s+\((.*)\)\s+(\S+)\s+'(.*)'\s+of type\s+'(.*)'\s+\]/; 
 

 
var matches = re.exec(str); 
 

 
console.log(matches);

+0

非常感謝!出於某種原因,當我執行此操作時,它不會打印「IN」。 – user2793354

+0

哦,我錯過了那一個。現在試試。 – James

+0

工作,再次感謝! – user2793354