2017-08-13 81 views
1

舉例來說,如果我有文字是這樣的:匹配數字

"hello800 more text 1234 and 567" 

應該匹配1234567,而不是800(自它跟在helloo之後,這不是數字)。

它與編程語言所做的類似,例如,在JavaScript中,abc123是一個變量,而50單獨,而不是跟隨文本,被視爲數字。

請記住,我只是否定了集合[A-Za-z]中的字符而不是其他字符。例如,+33-33仍然應返回33

我的第一次試驗是匹配不能設置

[^A-Za-z]([0-9]+) 

這並沒有在所有的工作。

我的第二次審判是扭轉字符串,並使用負前瞻:

/([0-9]+)(?![A-Za-z])/g 

它的工作原理只有在有1位。 1a不符合1(這很好),但123a匹配12(這很糟糕)。

+0

https://www.w3schools.com/Jsref/jsref_match.asp – Amit

回答

2

你可以試試下面的正則表達式

\b\d+\b 

可以檢查demo這裏

另外,如果你想匹配+33,你也可以嘗試正則表達式

\b[+-]*\d+\b 

demo

1

試試這個\b(\d+?)\b

  • \b檢查的單詞邊界(空格,endlines,等..)
  • \d檢查對數字

Demo Here

1

var str = "hello800 more text 1234 and 567 blah blah +33 end"; 
 
var result = str.match(/\b\d+\b/g); 
 
console.log(result);

說明:

\b : word boundary, make sure we don't have letter or digit before 
\d+ : 1 or more digits 
\b : word boundary, make sure we don't have letter or digit after