0

我在一个对象中有这个字符串:

<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

http://jsfiddle.net/mwagner72/HHMLK/

4

1 回答 1

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

于 2012-04-11T17:14:30.833 回答