2017-11-10 111 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