我需要帮助JavaScript中的正则表达式(抱歉,我还在尝试学习它。)。
我有字符串:value1 value2 (value3 value4) -value5 value6
(三个部分各有无限值。)
我需要分开:
var1 = value1 + ' ' + value2 ...
var2 = value3 + ' ' + value4 ...
var3 = value5 + ' ' + value6 ...
你能帮我解决这个问题吗?谢谢!
答案 0 :(得分:2)
如果字符串的格式保持给定格式,则分裂可能是一个想法:
'value1 value2 (value3 value4) -value5 value6'.split(/\s+\(|\)\s+\-/);
//=> ["value1 value2", "value3 value4", "value5 value6"]
答案 1 :(得分:1)
由于原始字符串已包含这些空格分隔符,请尝试:
/^(.*) \((.*)\) -(.*)$/.exec(str);
匹配字符串"anything (anything) -anything"
。
它返回一个数组arr[1]
,arr[2]
和arr[3]
包含三个结果。
请注意,不允许这些值包含特殊字符(例如(
或-
,前面有空格),否则格式无法确定。
答案 2 :(得分:1)
var str1 = "value1 value2 (value3 value4) -value5 value6";
//var parts = str1.match(/^([^(]+)\(\s?([^)]+)\)\s?(.+)$/);
var parts = str1.match(/^([^(]+)\(\s?([^)]+)\)\s?-(.+)$/);
var var1 = parts[1];
var var2 = parts[2];
var var3 = parts[3];
console.log(var1);
console.log(var2);
console.log(var3);
答案 3 :(得分:1)
我会首先找到每个部分,然后将每个部分中的值分开以提高效率。然后我会用一个空间将它们粘在一起。我使用了很多\s*
'因为我假设可能有多个空格(例如注释行中的空格)。
var str = 'value1 value2 (value3 value4) -value5 value6';
//var str = ' value1 value2 ( value3 value4) -value5 value6 ';
var pairs = str.match(/^\s*(.+?)\s*\(\s*(.+?)\s*\)\s*(.+?)\s*$/);
values1 = pairs[1].split(/\s+/);
values2 = pairs[2].split(/\s+/);
values3 = pairs[3].split(/\s+/);
console.log('values1:',values1,'-->',values1.join(' '));
console.log('values2:',values2,'-->',values2.join(' '));
console.log('values3:',values3,'-->',values3.join(' '));
RegEx说明
^
字符串的开头\s*
可能的空格(.+?)
一个字符组(至少1个字符)\s*
可能的空格\(
打开parantheses \s*
可能的空格(.+?)
一个字符组(至少1个字符)\s*
可能的空格\)
关闭parantheses \s*
可能的空格(.+?)
一个字符组(至少1个字符)\s*
可能的空格$
字符串结尾