我一直在尝试使用简单的jQuery操作来动态匹配和存储页面上的所有锚标签及其文本。但我发现了一个奇怪的行为。当你使用match()或exec()时,如果你指定针作为一个单独的RegExp对象或模式变量,那么你的查询只能在干草堆中匹配数十个实例。Javascript匹配和RegExp问题 - 奇怪行为
如果你指定这样
match(/needle/gi)
模式则针的每个实例相匹配。
这是我的代码。
你甚至可以启动Firebug并在此页面上尝试此代码。
var a = {'text':'','parent':[]};
$("a").each(function(i,n) {
var module = $.trim($(n).text());
a.text += module.toLowerCase() + ',' + i + ',';
a.parent.push($(n).parent().parent());
});
var stringLowerCase = 'b';
var regex = new RegExp(stringLowerCase, "gi");
//console.log(a.text);
console.log("regex 1: ", regex.exec(a.text));
var regex2 = "/" + stringLowerCase + "/";
console.log("regex 2: ", a.text.match(regex2));
console.log("regex 3: ", a.text.match(/b/gi));
对我来说,它返回:
regex 1: ["b"]
regex 2: null
regex 3: ["b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"]
任何人都可以解释这种行为的根源在哪里?
编辑:我忘了提及,对于regex1,不管是否为全局和不区分大小写的匹配添加标志“gi”都没有什么区别。它仍然只返回一场比赛。
EDIT2:解决了我自己的问题。我仍然不知道为什么一个regex1只匹配一个实例,但我设法匹配使用match()和regex1的所有实例。
因此,这个匹配所有动态!
var regex = new RegExp(stringLowerCase, "gi");
console.log("regex 2: ", a.text.match(regex));
什么是a.text – 2009-07-16 11:35:18
一个的内容只是两个元素的对象。我在代码的顶部定义了它。它的上下文可能是文档对象。 – picardo 2009-07-16 11:37:22