我在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;]。那可能吗?
答案 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
祝你好运!