Javascript正则表达式匹配先前和尾随字符

时间:2012-04-11 17:11:11

标签: javascript regex

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

<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/

1 个答案:

答案 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