簡體   English   中英

JS正則表達式未捕獲

[英]JS regex not capturing

我正在嘗試編寫JavaScript正則表達式。 到目前為止,我寫的是

function getName(text) {
    var r = /(.*) \(\d+\)/.exec(text);
    if (r && r.length>1) {
        return r[1];
    } else {
        return "";
    }
}

文本格式

名稱(可能包含空格),后跟一個空格,后跟一個開放的括號,再跟一個數字,再跟一個封閉的括號,再加上更多我不關心的文本。

foo bar(123)1.1 / 2.2 3.3%

我已經在幾個在線正則表達式測試器(regex101.com和regexr.com)中嘗試了上面的代碼,並且它按我的預期工作,即,它與rparen匹配並包括在內,並捕獲但不包括空格。 lparen。

在Firefox中運行時,匹配項僅是space-lparen-number-rparent,並且捕獲為空。 我嘗試添加gm標志並放置^錨,但無濟於事。

您的正則表達式似乎運行良好,我在Firefox 61,Chrome 68,IE11和Edge上進行了嘗試,並且所有這些都工作正常。 在我看來,您正在使用的執行環境不正確支持正則表達式。

這是我測試的內容:

/^(.*) \(\d+\)/

因此,首先^ ,然后捕獲所有內容(.*) ,然后捕獲一個空格 ,然后轉義括號\\( ,匹配\\d+中的所有數字,最后轉義括號\\)

用例:

富桿(123)

[
  "foo bar (123)", // the whole match ^(.*) \(\d+\)/
  "foo bar",       // first capture group (.*)
]

運行以下代碼段進行測試。

 var r = /^(.*) \\(\\d+\\)/.exec('foo bar (123)'); console.log(r); 

注意OP的答案:為了補充@PaulFloyd的答案,您可以使用\\s+捕獲不可見的字符,以便使用此正則表達式^(.*)\\s+\\(\\d+\\) ,即使有多余的\\n與空格。

我發現了問題。 我使用Opera調試器看到了它(我想Chrome也可以完成這項工作)。

源字符串是從文件中讀取的,並且其中的換行符尚未修剪,因此輸入文本確實

foo bar \\ n(123)其他東西

知道這一點,捕獲並匹配我的期望。

(Opera調試器顯示了嵌入式換行符)。

暫無
暫無

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

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