问了几次,但我无法正常工作。

我在替换各种类名的脚本中做了很多这些工作。

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/

10-08 22:38
查看更多