Javascript正则表达式捕获字符

时间:2014-02-26 10:00:41

标签: javascript regex

我在Javascript中编写了以下正则表达式:

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

我检查了这个字符串:

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

我执行了:

var res = rule.exec(str);

res restruns:

<string stringValue> <string2 stringValue2>

一切都以我需要的方式运作。但我必须改变两件事: 1-首先捕获每个事件(我的意思是每个标记块,在我的例子中有两个)

2-我应该删除返回值中的标签[&lt;&gt;]。那可能吗?

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分:4)

默认情况下,正则表达式是“贪婪的”。规则中的.*将匹配尽可能多的字符,但仍会成功。此外,由于您在开始时使用了^,因此您的模式只会与输入开头的标记匹配。这就是你目前匹配太多的原因。

/<([^>]*)>/

将匹配任一标记,并将内容(不包含&lt;&gt;)放入捕获组。

要查找每个标记,您可以多次运行正则表达式。将/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" ]

答案 2 :(得分: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
祝你好运!