我在对象中有这个字符串:
<FLD>dsfgsdfgdsfg;NEW-7db5-32a8-c907-82cd82206788</FLD><FLD>dsfgsdfgsd;NEW-480e-e87c-75dc-d70cd731c664</FLD><FLD>dfsgsdfgdfsgfd;NEW-0aad-440a-629c-3e8f7eda4632</FLD>
this.model.get('value_long').match(/[<FLD>\w+;](NEW[-|\d|\w]+)[</FLD>]/g)
返回:
[";NEW-7db5-32a8-c907-82cd82206788<", ";NEW-480e-e87c-75dc-d70cd731c664<", ";NEW-0aad-440a-629c-3e8f7eda4632<"]
我的正则表达式有什么问题,它正在拾取前面的;
和尾随<
这是一个正则表达式的链接 http://regexr.com?30k3m
更新:
这是我想要的回复:
["NEW-7db5-32a8-c907-82cd82206788", "NEW-480e-e87c-75dc-d70cd731c664", "NEW-0aad-440a-629c-3e8f7eda4632"]
这里有一个JSfiddle
答案 0 :(得分:2)
方括号创建一个您不想要的字符类,请尝试将正则表达式更改为以下内容:
<FLD>\w+;(NEW[-\d\w]+)</FLD>
由于您希望从每个匹配项中获取捕获组,因此可以使用以下代码构建包含捕获组的数组:
var regex = /<FLD>\w+;(NEW[\-\d\w]+)<\/FLD>/g;
var match = regex.exec(string);
var matches = [];
while (match !== null) {
matches.push(match[1]);
match = regex.exec(string);
}
[<FLD>\w+;]
会匹配方括号内的一个字符,当我认为你真正想做的是匹配所有这些时。另外对于其他字符类[-|\d|\w]
,您可以删除|
,因为它已经隐含在字符类中,|
只应用于组内的交替。
以下是新正则表达式的更新链接:http://jsfiddle.net/RTkzx/1