簡體   English   中英

正則表達式僅在 Javascript 中沒有跟在或后面沒有字母的情況下才匹配數字

[英]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]?)但它不起作用。

我怎樣才能最好地解決這個問題? 謝謝。

我想匹配數字,但不匹配單詞。

您可以在正則表達式中使用環視:

\b\d*[,.]?\d+\b
  • \\b用於單詞邊界

正則表達式演示

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

嘗試這個

var pattern= /([\d.]+)/;

https://regex101.com/r/q1qDHV/1

暫無
暫無

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

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