2012-06-11 50 views
1

我有一個可以接受不同格式的值的屬性:財產正則表達式值

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代碼)

+0

是的這是可能的,正是一個正則表達式會爲你做什麼。你有沒有試圖自己編碼? –

+0

警告:format1是format2的一個子集 –

+0

我沒有用過很多正則表達式,現在我正在更多地考慮它。我的主要問題是,如果可以比較格式並檢索每種格式的值,因爲據我所知,正則表達式僅用於比較格式。 – jsgroove

回答

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('-'); 
} 
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!"); 
}