[英]JavaScript Regex: Match "-" only if a digit is followed by "-", but not match when there is only single "-"
[英]Regex to match digits only if not followed or proceeded by letters in Javascript
我想匹配數字,但不匹配單詞(在 JavaScript 中)。
以下應匹配:
1
1,2
1.5-4 (matches 1.5 & 4 separately)
(1+3) (matches 1 & 3 separately)
=1;
以下不應該匹配:
FF3D
3deg
我以為我可以用負向預測來解決,就像這樣: (?![A-Za-z]+)([0-9]+[\\.|\\,]?[0-9]?)
但它不起作用。
我怎樣才能最好地解決這個問題? 謝謝。
2021年更新:
由於后視支持已顯着增長,因此使用基於后視的解決方案是有意義的:
/(?<![a-z])\d*[.,]?\d+(?![a-z])/gi # ASCII only
/(?<!\p{L})\p{N}*[.,]?\p{N}+(?!\p{L})/giu # Unicode-aware
請參閱正則表達式演示。 請在此處跟蹤后視和 Unicode 屬性類支持。
細節
(?<![az])
- 當前位置的左側不允許有 ASCII 字母(或任何 Unicode 字母,如果使用\\p{L}
)\\d*[.,]?\\d+
(?![az])
- 當前位置的右側不允許有 ASCII 字母(或任何 Unicode 字母,如果使用\\p{L}
)。原答案
為了匹配任何獨立的整數或浮點數,您需要使用點或逗號作為小數點分隔符
/(?:\b\d+[,.]|\B[.,])?\d+\b/g
請參閱正則表達式演示。 這里的要點是您不能在\\b
之前使用單詞邊界\\b
.
因為它會使所有匹配項無效,例如.55
(僅匹配55
)。
詳情:
(?:\\b\\d+[,.]|\\B[.,])?
- 兩種選擇之一:
\\b\\d+[,.]
- 一個單詞邊界(在字符串之前或開始之前必須有一個非單詞字符),然后是 1+ 位數字,然后是一個.
或,
|
- 或者\\B[.,]
- 單詞邊界以外的位置(僅非單詞字符或字符串開頭),然后是.
或,
\\d+
- 1+ 位數\\b
- 單詞邊界。 const regex = /(?:\\b\\d+[,.]|\\B[.,])?\\d+\\b/g; const str = `.455 and ,445 44,5345 435.54 4444 1 1,2 1.5-4 (1+3) =1; FF3D 3deg`; console.log(str.match(regex));
如果您還需要添加對指數的支持,請使用:
/(?:\b\d+[,.]|\B[.,])?\d+(?:e[-+]?\d+)?\b/ig
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.