属性值的正则表达式

时间:2012-06-11 21:59:34

标签: javascript jquery regex

我有一个可以接受不同格式作为值的属性:

format1 - 2 values separated by space
ex1: left center
ex2: center bottom

format2 - 2 values separated by space, each one can have 1 or 2 values separated by "-" 
ex1: left-right center
ex2: center top-bottom

format3 - 2 values separated by "-"
ex1: left-diag
ex2: right-diag

现在我正在分割字符串并使用一系列if块来确定格式和值。

在这种情况下是否可以使用正则表达式来确定格式并检索每种格式的值?

(JavaScript代码)

2 个答案:

答案 0 :(得分:2)

如果您需要使用单个正则表达式,则应该这样做:

/^((?=\S*\s)[\w-]+|\w+)[\s-](\S.*)/

基于以下逻辑:如果有空格则是分隔符,否则-是分隔符。第一组将所有内容与分隔符匹配,第二组将其余部分分组。

Example usage

function split(str){
  var m = str.match(/^((?=\S*\s)[\w-]+|\w+)[\s-](\S.*)/);
  m.shift();
  return m;
}

alert(split("foo bar"));
alert(split("foo-bar baz"));
alert(split("baz foo-bar"));
alert(split("baz-foo"));​

另一方面,您不必使用这样复杂的表达式。 像这样简单的事情会做:

function split(str){
  var arr = str.split(' ');
  if(arr.length == 2) return arr;
  return str.split('-');
}

答案 1 :(得分:0)

您可以使用以下内容:

var regex = /^(\w+)$/g;
var data;
if(regex.test(data)) {
    var matches = data.match(regex);
    for(var match in matches) {
        console.log(matches[match]);
    } 
} else {
    console.log("No matches found!");
}