我想为此正则表达式传递一个动态值,但它不起作用。我不确定我的代码中缺少什么。我试图逃避字符串但由于某种原因我错过了一些东西。
非常感谢任何帮助。
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)
}
答案 0 :(得分:1)
在失败的RegExp中,您需要删除'\\b'
周围的单引号。
编辑:http://jsfiddle.net/UqL4J/处的小提示似乎表明删除了单引号的正则表达式按预期工作。
答案 1 :(得分:1)
试试这个:
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);
继续,点燃你的萤火虫,粘贴它然后点击 Run
<强>更新强>
检查此代码的工作原理:
var c = 'myclass';
var r = new RegExp("(?:^| )(\\b"+c+"\\b)(?: |$)");
console.log(r);
var str = "myclass";
var m = (""+str).match(r);
console.log(m);
答案 2 :(得分:0)
我不相信您需要在将值添加到正则表达式('\\b'
)之前和之后添加字符。尝试使用
var r = new RegExp("(?:^| )(" + c + ")(?: |$)"), m = (""+n.className).match(r);
将扩展为
(?:^| )(myclass)(?: |$)
与第一个RegEx行相同。