6

次のJavascript正規表現があります:

 var regex = '/^' + name + '/'; 
 var s ='';
 s = this.innerHTML.toString().toLowerCase().match(regex);
    if (s != null){
         //do stuff
    }

この正規表現は期待どおりに機能せず、s設定されません (s = null常に) アイデアはありますか?

4

6 に答える 6

7
var regex = new RegExp("^" + name);

たぶん、これで問題が解決します。

于 2013-09-06T12:01:42.917 に答える
3

パターンは文字列連結によって動的に生成されるため、RegExp オブジェクトを作成する必要があります。

var regex = new RegExp('^' + name + ');
于 2013-09-06T12:02:47.860 に答える
1

さまざまな正規表現の側面をテストできるように、 jsFiddleを作成しました。

問題は、 のフォーマットvar regexが正しくないことです。/esを削除します。

// Test code
var name = "foobar";
//var test = "foobar at the start of a sentence";
var test = "a sentence where foobar isn't at the start";

//var regex = '/^' + name + '/'; // Wrong format
var regex = '^' + name; // correct format
var s = '';
//s = this.innerHTML.toString().toLowerCase().match(regex);
s = test.toString().toLowerCase().match(regex);
if (s != null) {
    //do stuff
    alert("works");
}
于 2013-09-06T12:08:18.603 に答える
1

正規表現を作成するには、次の 2 つの方法があります。

1) リテラル形式の使用

var re = /\w+/;

2) オブジェクト作成フォームの使用

var re = new RegExp("\\w+");

通常、リテラル形式が必要です。あなたの場合、文字列から作成している場合は、オブジェクト作成フォームを使用する必要があります。

var re = new RegExp("^" + name);
于 2013-09-06T12:43:12.077 に答える
1

クエリ文字列を連結する場合は、RegExp オブジェクトを使用する必要があります。したがって、あなたの場合、/クエリの一部です。

 var regex = new RegExp('^' + name);
 var s = '';
 s = this.innerHTML.toString().toLowerCase().match(regex);
 if (s != null) {
   //do stuff
 }
于 2013-09-06T12:03:27.707 に答える
0

スラッシュを削除するだけで機能します。

pattern = function(name){"^"+name;}

(name + "whatever").match(pattern(name)); // not null
("whatEver..NotName").match(pattern(name)); // null
于 2013-09-06T12:00:52.310 に答える