簡體   English   中英

與其他數字混合時的價格正則表達式

[英]Price Regex when mixed with other numbers

當從下拉列表中選擇一個選項時,嘗試編寫一些JavaScript正則表達式以匹配價格。 輸出示例: Acrylic Print 12 x 16 inch (£95)

我的內容包含在變量中( price ),我只想使用match來選擇價格。 我目前有以下內容:

price = price.match(/[\\d\\.\\d]+/i)

這得到12,而不是95。

任何幫助,將不勝感激。

干杯,

擔。

變更1

嘗試HamZaDzCyber​​DeV的建議:

price.match(/(?<=£)\\d+(?:\\.\\d+)?/)

返回以下錯誤。

Uncaught SyntaxError: Invalid regular expression: /(?<= )d+(?:.d+)?/: Invalid group

抱歉,不知道我在處理RegEx時在做什么。 每次都讓我感到難過。

變更2

.match(/(?<=\\(.)\\d+\\.*\\d*(?=\\))/i)

錯誤:

Uncaught SyntaxError: Invalid regular expression: /(?<=\\(.)\\d+\\.*\\d*(?=\\))/: Invalid group

考慮以下通用正則表達式的powershell示例。

  • [(][^0-9.]?([.][0-9]{1,2}|[0-9]{1,}[.][0-9]{1,2}|[^.][0-9]{1,})[)]任何單個非數字前導字符都將被忽略
  • [(][£$]([.][0-9]{1,2}|[0-9]{1,}[.][0-9]{1,2}|[^.][0-9]{1,})[)]必須具有已知的貨幣符號

$Matches = @()
$String = 'Acrylic Print 12 x 16 inch (£95)  (£95.03)  (£95......00) (90)  (23.45) (£95.06) (.1) (.22)  (.) (£.24)  (£.)'
Write-Host start with 
write-host $String
Write-Host
Write-Host any valid decimal number inside parans
([regex]'[(][^0-9.]?([.][0-9]{1,2}|[0-9]{1,}[.][0-9]{1,2}|[^.][0-9]{1,})[)]').matches($String) | foreach {
    write-host "at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'"
    } # next match
Write-Host
Write-Host Only decimal number inside parans where the number is preceeded by a known symbol
 ([regex]'[(][£$]([.][0-9]{1,2}|[0-9]{1,}[.][0-9]{1,2}|[^.][0-9]{1,})[)]').matches($String) | foreach {
    write-host "at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'"
    } # next match

產量

start with
Acrylic Print 12 x 16 inch (£95)  (£95.03)  (£95......00) (90)  (23.45) (£95.06) (.1) (.22)  (.) (£.24)  (£.)

any valid decimal number inside parans
at 29 = '95'
at 36 = '95.03'
at 59 = '90'
at 65 = '23.45'
at 74 = '95.06'
at 82 = '.1'
at 87 = '.22'
at 99 = '.24'

Only decimal number inside parans where the number is preceeded by a known symbol
at 29 = '95'
at 36 = '95.03'
at 74 = '95.06'
at 99 = '.24'

摘要

  • [(]與輸入文本中的圓括號匹配
  • [£$]匹配單個£或$符號
  • [^0-9]? 部分可讓您找到任何非數字,例如£符號。 源字符串中可能實際存在也可能不存在
  • 正則表達式部分([.][0-9]{1,2}|[0-9]{1,}[.][0-9]{1,2}|[^.][0-9]{1,})查找並返回所有有效數字,這些數字也可能包含一個小數點后跟兩位數字。 這不會僅返回“。”
    • (指示regex返回在此開放括號和下面的封閉括號之間找到的所有內容
    • [.][0-9]{1,2}在小數點后找到1或2個數字
    • | 要么
    • [0-9]{1,}[.][0-9]{1,2} 1個或多個數字,小數點后跟1或2個數字
    • | 要么
    • [^.][0-9]{1,} 1個或多個不帶小數點的數字
    • ( close paran指示正則表達式停止返回任何其他匹配項。此close括號與上面的開放括號匹配
  • [)]匹配輸入文本中的右括號

您可以嘗試使用(?<=\\(.)\\d+\\.?\\d*(?=\\)) 這將向前看和向后看,以查看數字是否被()包圍。 您可以在此處查看對此的測試。

這是假設格式相同()沒有空格。 將其分解成小塊,您將得到:

  1. (?<=\\(.) - (后面是一個正號,后跟一個字符。該字符用於捕獲用於貨幣的符號。如果使用了特定的貨幣標記,則可以將.替換為到目前為止, (到數字開頭之間的任何符號都可以使用。
  2. \\d+\\.?\\d* -查找數字的正則表達式。 這會找到(至少)一個數字,然后可能是一個數字. 和第二組數字。 如果這不僅是固定的“美元”金額,還應該捕獲價格中包含的所有更改。 根據您使用哪種貨幣,小數點后可以跟隨多少位數,您可以將第二個\\d*更改為\\d{x,y} ,其中小數點后允許的位數在xy之間。 因此,對於小數點后的0到2位數字,您可以使用\\d{0,2}
  3. (?=\\)) -確保正則表達式后跟a )的積極態度。

這些共同幫助將正則表達式分解為較小的部分,以便您可以了解不同的組件及其工作原理,而不僅僅是看到一個大而恐怖的正則表達式。

暫無
暫無

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

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