Javascript:拆分并标记提供的字符串

Javascript:拆分并标记提供的字符串,javascript,regex,string,Javascript,Regex,String,我正在处理一个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_STRIN

我正在处理一个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().slice(1,-1)
  • 删除上次出现的“类型”
  • 使用空格拆分字符串(忽略多次出现):.split(/\s+/g))
  • 从最后一个数组元素中删除了第一个和最后一个单引号(将包含'IDENTIFIER_STRING'或类似内容)
  • 从主字符串中,在firstIndexOf(“')和lastIndexOf('of type')之间创建子字符串,并对其进行修剪以获得“Dr.Dr.Dre和D'Silva of type Band的节拍”
现在,各位专家的问题是,有没有更干净的方法来解决这个问题:)

提前谢谢


~VS

使用一个正则表达式!您感兴趣的值将在匹配项[1]到匹配项[5]中

您可能需要根据各种标记中存在的字符调整此正则表达式。(例如,它假设有一些空格,然后是条件,然后是更多的空格,如果条件中有空格,它将中断)。你可以算出正则表达式

var str=“[Der&D'Silva of type Band'的Beats by Dr.Dre&D'IDENTIFIER_STRING'类型中的条件12(品牌)]”;
var re=/\[\s+(\s+)\s+\(.*)\)\s+(\s+)\s+'(.*)\s+类型为\s+'(.*)\s+\]/;
var matches=re.exec(str);

console.log(匹配项)您可以使用一个正则表达式获得所需的一切:

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"

非常感谢!由于某种原因,当我执行这个时,它没有打印“IN”。哦,我错过了那个。现在试试。