簡體   English   中英

Javascript正則表達式提取數字

[英]Javascript Regex to Extract a Number

我有像這樣的字符串

(123)abc
defg(456)
hijkl
(999)
7

我希望一次一個地將這些字符串與正則表達式匹配,以從字符串開頭的字符串中提取任何數字,其中'('中間有數字,然后是')'后跟零個或多個字符。 因此,在上面的5個例子中,我將在第一種情況下匹配123,在第二種和第三種情況下不匹配,在第四種情況下為999,在第五種情況下沒有任何內容。

我試過這個

var regex = new RegExp("^\((\d+)\)", "gm");
var matches = str.match(regex);

但是匹配總是為空。 我究竟做錯了什么?

我在regex101嘗試了這個正則表達式,它似乎工作,所以我不知道為什么代碼不起作用。

我沒有看到你的正則表達式有什么問題,嘗試從regex101生成的代碼:

var re = /^\((\d+)\)/gm; 
var str = '(123)abc\ndefg(456)\nhijkl\n(999)\n7';
var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

工作演示

順便說一句,正如jonathan lonowski在他的評論中指出的那樣,當你使用RegExp時你必須逃避反斜杠:

new RegExp("^\\((\\d+)\\)", "gm")

您需要將捕獲組的結果推送到數組,為此使用exec()方法。

var str = '(123)abc\ndefg(456)\nhijkl\n(999)\n7'
var re  = /^\((\d+)\)/gm, 
matches = [];

while (m = re.exec(str)) {
  matches.push(m[1]);
}

console.log(matches) //=> [ '123', '999' ]

你可以使用這個正則表達式:

var regex = /^\((\d+)(?=\))/gm;

並使用捕獲的組#1

RegEx演示

使用正則表達式構造函數(注意雙重轉義):

var regex = new RegExp("^\\((\\d+)(?=\\))", "gm");

暫無
暫無

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

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