Javascript dynamic Regexp value



我想为这个正则表达式传递一个动态值,但它不起作用。我不确定我的代码中缺少了什么。我试着挣脱绳子,但不知什么原因,我错过了什么。

非常感谢您的帮助。

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线路相同。

最新更新