我想为这个正则表达式传递一个动态值,但它不起作用。我不确定我的代码中缺少了什么。我试着挣脱绳子,但不知什么原因,我错过了什么。
非常感谢您的帮助。
var r = new RegExp('(?:^| )(myclass)(?: |$)'), m = (""+n.className).match(r); //found
var c = 'myclass';
var r = new RegExp("(?:^| )('\b'" + c + "'\b')(?: |$)"), m = (""+n.className).match(r); // not found
编辑--添加动态值(myclass)时,不返回任何节点。当它被硬编码时,我可以找到一个没有问题的节点。
var n = document.getElementById('parentID');
var c = 'myclass';
function find(n,c) {
do {
if (typeof n.className !== 'undefined') {
var r = new RegExp("(?:^| )(myclass)(?: |$)"), m = (""+n.className).match(r);
if (m !== null) {
n.setAttribute("id", "current");
}
}
if (n.hasChildNodes()) {
finds(n.firstChild)
}
}
while (n = n.nextSibling)
}
试试这个:
var c = 'myclass';
var r = new RegExp("(?:^| )(\b"+c+"\b)(?: |$)");
console.log(r);
这将以的形式返回结果
RegExp /(?:^| )('b'myclass'b')(?: |$)/
假设您不希望b
位于myclass
的两侧,那么只需使用以下代码:
var c = 'myclass';
var r = new RegExp("(?:^| )("+c+")(?: |$)");
console.log(r);
继续,发射你的萤火虫,粘贴在里面,点击运行
更新
检查该代码的工作情况:
var c = 'myclass';
var r = new RegExp("(?:^| )(\b"+c+"\b)(?: |$)");
console.log(r);
var str = "myclass";
var m = (""+str).match(r);
console.log(m);
在失败的RegExp中,我认为您需要删除'\b'
周围的单引号。
编辑:在http://jsfiddle.net/UqL4J/似乎表明删除了单引号的regexp确实可以正常工作。
我认为不需要在将值添加到正则表达式('\b'
)之前和之后添加字符。尝试使用线路
var r = new RegExp("(?:^| )(" + c + ")(?: |$)"), m = (""+n.className).match(r);
将扩展到
(?:^| )(myclass)(?: |$)
这与第一RegEx线路相同。