JavaScript RegExp三部分

时间:2012-03-18 13:43:19

标签: javascript regex

我需要帮助JavaScript中的正则表达式(抱歉,我还在尝试学习它。)。

我有字符串:value1 value2 (value3 value4) -value5 value6 (三个部分各有无限值。)

我需要分开:

var1 = value1 + ' ' + value2 ...
var2 = value3 + ' ' + value4 ...
var3 = value5 + ' ' + value6 ...

你能帮我解决这个问题吗?谢谢!

4 个答案:

答案 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*可能的空格
  • $字符串结尾