2010-04-19 130 views
1

任何帮助?当我运行此我得到“无效量词?< = HREF =”正则表达式失败

var aHrefMatch = new RegExp("(?<=href\=")[^]+?(?=")"); 
var matchedLink = mystring.match(aHrefMatch); 

但我知道正则表达式是有效的。

任何想法?

回答

9

的Javascript不支持lookbehind断言。它只支持lookahead的。产生错误是因为它假定?是0或1的量词,但在子模式开始时没有要量化的元素(由(左括号开始)

此外,您的字符串似乎缺少一些反斜杠,因为双引号是没有逃过那里。它应该会产生一个语法错误。

也许这段代码可以帮助你做你想达到什么目的:

var match = mystring.match(/href=\"([^\"]*)\"/); 
var matchedLink = match[1]; 
+0

+1是指出的唯一答案* both *问题:lookbehinds和未转义的引号。 – 2010-04-19 14:17:39

+0

是的,刚刚读过另一篇文章,指出js不支持lookbehind断言。谢谢! – mindwire22 2010-04-19 19:23:47

1

你一定要逃逸正则表达式的双引号与标准反斜杠:

var aHrefMatch = new RegExp("(?<=href\=\")[^]+?(?=\")"); 

...或者你可以只用单引号指定的字符串:

var aHrefMatch = new RegExp('(?<=href\=")[^]+?(?=")'); 
1

您是不是要找等号(=)后,并提前看后逃跑报价=? 此外,如果你只是想匹配href =“一些文本”,那么你真的不需要看后面的结构。以下应该做的很好:

href=\"[^"]+\" 

如果您正在尝试匹配其他内容,请详细说明。谢谢

0

不知道你想做什么。但是如果你想获得链接。

var aHrefMatch = new RegExp(/(href\=\")([\w\-\/]+)?(\")/); 
var matchedLink = mystring.match(aHrefMatch)[2]; 
+0

是的,我需要获取字符串中锚元素的href。 Fredrik你的代码似乎最接近,但当我运行它时,我得到: - 非法字符 var aHrefMatch = new RegExp(href = \“[^”] + \“); \ n – mindwire22 2010-04-19 08:54:35

+0

确保您删除所有空格,声音像一些非法字符使它成为你复制/粘贴的原因 如果不是请粘贴什么mystring看起来像 – fredrik 2010-04-19 10:43:48

+0

RegExp构造函数接受一个字符串作为它的第一个参数@ Meander365,在开始处改变'/'结束于'''。或者像@Rithiur建议的那样使用正则表达式。 – 2010-04-19 14:16:22