簡體   English   中英

正則表達式從第二個符號開始提取數字

[英]regex to extract numbers starting from second symbol

對不起,還有大量的正則表達式問題,但我找不到與我的需求相似的東西。 我想輸出的字符串可以包含數字或字母“ A”作為第一個符號,而數字只能包含在其他位置。 輸入是任何字符串,例如:

---INPUT---    -OUTPUT-
A123asdf456 -> A123456
0qw#$56-398 -> 056398
B12376B6f90 -> 12376690
12A12345BCt -> 1212345

我試過的是replace(/[^A\\d]/g, '') (我使用JS),除了在字符串中間有A的情況外,幾乎可以完成工作。 我嘗試使用^錨,但是模式與字符串中的其他數字不匹配。 不確定哪個更容易-提取匹配的字符或刪除不匹配的字符。

我認為您可以使用負前瞻來做到這一點,然后替換為空字符串。

在非捕獲組(?: ,使用否定的lookahad (?! ?!斷言其后跟不是字符串的開頭,后跟^A或數字\\d 。如果是這種情況,請匹配任何字符.

(?:(?!^A|\\d).)+

 var pattern = /(?:(?!^A|\\d).)+/g; var strings = [ "A123asdf456", "0qw#$56-398", "B12376B6f90", "12A12345BCt" ]; for (var i = 0; i < strings.length; i++) { console.log(strings[i] + " ==> " + strings[i].replace(pattern, "")); } 

您可以在交替的兩個不同側面中匹配並捕獲所需和不需要的字符,然后將所有不需要的字符替換為空:

^(A)|\D

JS代碼:

 var inputStrings = [ "A-123asdf456", "A123asdf456", "0qw#$56-398", "B12376B6f90", "12A12345BCt" ]; console.log( inputStrings.map(v => v.replace(/^(A)|\\D/g, "$1")) ); 

您可以使用以下正則表達式: /(^A)?\\d+/g

 var arr = ['A123asdf456','0qw#$56-398','B12376B6f90','12A12345BCt', 'A-123asdf456'], result = arr.map(s => s.match(/(^A|\\d)/g).join('')); console.log(result); 

暫無
暫無

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

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