簡體   English   中英

正則表達式匹配不返回true或false

[英]Regex match not returning true or false

我試圖匹配帶有括號的值。

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/

謝謝

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("\\\\(.*?\\\\)"); ,但是由於您的正則表達式中沒有變量,因此您應該只使用regex文字。

.match()返回匹配組的數組。

您正在考慮.test() ,它返回true或false。

另外,您的\\會被Javascript字符串文字所吞噬。
您應該改用正則表達式文字。

這缺少要匹配的組,並且缺少布爾值:

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

使用.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的執行速度比.match http://jsperf.com/exec-vs-match-vs-test/5快許多倍

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM