0

问了几次,但我无法让它工作。

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

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 来做这件事 :-)

4

2 回答 2

2

您需要转义转义的 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
于 2013-09-04T13:16:10.097 回答
0

简单的:

var rx = /[W].*/;
var text = "Hello World"
text.replace( rx, "$1" );
于 2013-09-04T13:16:13.247 回答