2014-02-26 103 views
2

我寫了下面的正則表達式在Javascript中的字符:JavaScript正則表達式來捕獲

var rule = /^<[a-zA-Z0-9].*>/; 

而且我檢查針對此字符串:

var str = "<string stringValue><string2 stringValue>"; 

並執行我:

var res = rule.exec(str); 

而res restrns:

<string stringValue> <string2 stringValue2> 

一切都以我需要的方式工作。但我必須改變兩件事: 1-首次捕獲每次出現(我的意思是每個標記塊,在我的例子中有兩個)

2-我應該去掉返回值中的標記[<>]。那麼可能嗎?

+1

你可以使用輔助功能刪除「<" and ">」 – 2014-02-26 10:05:36

+0

不,我想看看是否有可能與RegExp –

+1

我不太明白第1點......你的意思是你想要得到整個「字符串stringValue「標籤的內容? – Onheiron

回答

4

正則表達式,: 嘗試下面的代碼。規則中的.*將盡可能匹配儘可能多的字符,同時仍然成功。另外,由於您在開始時使用了^,因此您的模式只會在輸入開始時與標籤匹配。這就是爲什麼你目前匹配得太多。

/<([^>]*)>/ 

將匹配的標籤,並把內容(不<>)在捕獲組。

要查找每個標記,可以多次運行正則表達式。將/g添加到最後使得表達式成爲全局的,這允許這種行爲。

var rule = /<([^>]*)>/g, 
    match, 
    tags = [], 
    input = "<string stringValue><string2 stringValue>"; 

while (match = rule.exec(input)) { 
    tags.push(match[1]); 
} 

console.log(tags); 

在每一循環中,match[1]是指第一捕獲組,在表達式中的括號。

它將返回:

[ "string stringValue", "string2 stringValue" ] 
4

我想你想獲得關鍵值對。默認情況下, 「貪婪」

var rule = /<([a-zA-Z0-9]*)\s+([a-zA-Z0-9]*)>/g; 
var str = "<string stringValue><string2 stringValue>"; 
var res; 

while((res = rule.exec(str)) !== null) { 
    console.log("key: "+res[1]+" value: "+res[2]); 
} 

//output 
//key: string value: stringValue 
//key: string2 value: stringValue 
+0

讓我檢查它 –

+0

所以RES是一個數組與正則表達式組中? – Onheiron

0

嘗試這樣的:

var reg = /<[a-zA-Z0-9][^>]*>/g; 
var str = "<string stringValue><string2 stringValue>"; 
var res = str.match(reg); 
res = res ? res.map(function(i){return i.replace(/^<|>$/g, '')}) : res; 
// res[0]: string value: stringValu 
// res[1]: string2 value: stringValue 

祝你好運!