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 に答える