0

括弧付きの値がある場合に一致させようとしています。

var onsuccess = "aaa;bbb(ccc)";
onsuccess.split(';').forEach(function (success) {
                var re = new RegExp("\(.*?\)");
                document.write(success + ": " + success.match(re) + "<br>");
        });​

出力は

aaa: ,
bbb(ccc): ,

期待されるのは

aaa: false
bbb(ccc): true

どこが間違っているのですか?私はこのページを例として使用しています:http: //www.regular-expressions.info/javascriptexample.html

これが私のフィドルです:http://jsfiddle.net/valamas/8B5zw/

ありがとう

4

4 に答える 4

3
var onsuccess = "aaa;bbb(ccc)";
onsuccess.split(';').forEach(function (success) {
   var re = /\(.*?\)/;
   document.write(success + ": " + re.test(success) + "<br>");
});

作業デモ。

注:を使用する場合はnew RegExp(...)、円記号をエスケープする必要があります。

正規表現はである必要がvar re = new RegExp("\\(.*?\\)");ありますが、正規表現には変数がないため、代わりに正規表現リテラルを使用する必要があります。</ p>

于 2012-09-27T01:55:42.003 に答える
2

.match()一致するグループの配列を返します。

あなたは.test()、trueまたはfalseを返すを考えています。

また、あなた\のsはJavascript文字列リテラルに飲み込まれています。
代わりに正規表現リテラルを使用する必要があります。

于 2012-09-27T01:47:18.007 に答える
1

これには、一致するグループとブール値へのキャストがありませんでした。

var onsuccess = "aaa;bbb(ccc)";
onsuccess.split(';').forEach(function (success) {
                //var re = new RegExp("(\(.*?\))");
                var re = /.*(\(.*?\)).*/;
                document.write(success + ": " + !!success.match(re) + "<br>");
        });​
于 2012-09-27T01:50:19.210 に答える
1

キャストする代わりに.testを使用する

var onsuccess = "aaa;bbb(ccc)";
var rxParens = /.*(\(.*?\)).*/;

onsuccess.split(";").forEach(function(success) {
    document.write(success + ': ' + rxParens.test(success) + '<br>' );
});

aaa: false
bbb(ccc): true

補足として、.testは.matchhttp://jsperf.com/exec-vs-match-vs-test/5よりも何倍も高速に実行されます

于 2012-09-27T02:06:26.463 に答える