Javascript正则表达式匹配太多字符

时间:2014-10-10 01:29:31

标签: javascript regex

我的字符串被定义为;

var str = 'participant Tracking [[http://www.yahoo.com]] again [[more]]'
var res = str.match(/\[\[(.*[^\]])\]\]/g)

我想提取“http://www.yahoo.com”和“更多”,但我正在

[ '[[http://www.yahoo.com]] again [[more]]' ]

正则表达式应该是什么?

3 个答案:

答案 0 :(得分:2)

]]置于否定的字符类中不会给出您想要的结果。在下面的负面预测中使用。

\[\[((?:(?!\]\]).)*)\]\]

DEMO

> var str = 'participant Tracking [[http://www.yahoo.com]] again [[more]]'
undefined
> var re = /\[\[((?:(?!\]\]).)*)\]\]/g;
undefined
> var matches = [];
undefined
> while (m = re.exec(str)) {
..... matches.push(m[1]);
..... }
2
> console.log(matches)
[ 'http://www.yahoo.com', 'more' ]

答案 1 :(得分:2)

在循环中使用exec()方法,将捕获的组的匹配结果推送到结果数组。此外,从捕获组中删除点.贪婪的运算符*,因为您没有必要使用否定。

var str = 'participant Tracking [[http://www.yahoo.com]] again [[more]]'
var re  = /\[\[([^\]]*)]]/g, 
matches = [];

while (m = re.exec(str)) {
  matches.push(m[1]);
}
console.log(matches) //=> [ 'http://www.yahoo.com', 'more' ]

答案 2 :(得分:0)

var str = 'participant Tracking [[http://www.yahoo.com]] again [[more]]'
var res = str.match(/\[\[(.+?)\]\]/)
console.log(res[1]);