问了几次,但我无法让它工作。
我在一个脚本中做了很多这样的事情,替换了各种类名。
label.className.replace(/(?:^|\s)ui-icon-checkbox-on(?!\S)/g , ' ui-icon-globe');
并且想要用通用函数替换我的 replace
调用,该函数正在传递像 ui-icon-checkbox-on
这样的字符串,并返回一个正则表达式对象来处理我的替换。
但是,这不起作用=它没有取代任何东西:
var foo = function (className) {
return new RegExp("(?:^|\s)" + className + "(?!\S)", "g");
};
label.className = label.className.replace(foo("ui-icon-checkbox-on"), ' ui-icon-globe');
我不知道为什么。
问题:
如何正确创建正则表达式对象,并使用它用另一个字符串替换一个字符串?
谢谢!
PS:不,我不想使用 jQuery 来做到这一点:-)
最佳答案
您需要转义转义的 RegExp 序列:
var foo2 = function (className) {
return new RegExp("(?:^|\\s)" + className + "(?!\\S)", "g");
//----------------------^^^---------------------^^^
};
您的原始函数将返回:
foo("ASD")
// returns:
/(?:^|s)ASD(?!S)/g
但我们追求的是:
foo2("ASD")
// returns:
/(?:^|\s)ASD(?!\S)/g
关于javascript - 如何使用正则表达式与变量而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18614855/