Javascript动态Regexp值

时间:2014-04-09 11:43:37

标签: javascript regex

我想为此正则表达式传递一个动态值,但它不起作用。我不确定我的代码中缺少什么。我试图逃避字符串但由于某种原因我错过了一些东西。

非常感谢任何帮助。

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)
}

3 个答案:

答案 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行相同。