[英]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。
任何幫助,將不勝感激。
干杯,
擔。
嘗試HamZaDzCyberDeV的建議:
price.match(/(?<=£)\\d+(?:\\.\\d+)?/)
返回以下錯誤。
Uncaught SyntaxError: Invalid regular expression: /(?<= )d+(?:.d+)?/: Invalid group
抱歉,不知道我在處理RegEx時在做什么。 每次都讓我感到難過。
.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*(?=\\))
。 這將向前看和向后看,以查看數字是否被()
包圍。 您可以在此處查看對此的測試。
這是假設格式相同()
沒有空格。 將其分解成小塊,您將得到:
(?<=\\(.)
- (
后面是一個正號,后跟一個字符。該字符用於捕獲用於貨幣的符號。如果使用了特定的貨幣標記,則可以將.
替換為到目前為止, (
到數字開頭之間的任何符號都可以使用。 \\d+\\.?\\d*
-查找數字的正則表達式。 這會找到(至少)一個數字,然后可能是一個數字.
和第二組數字。 如果這不僅是固定的“美元”金額,還應該捕獲價格中包含的所有更改。 根據您使用哪種貨幣,小數點后可以跟隨多少位數,您可以將第二個\\d*
更改為\\d{x,y}
,其中小數點后允許的位數在x
和y
之間。 因此,對於小數點后的0到2位數字,您可以使用\\d{0,2}
。 (?=\\))
-確保正則表達式后跟a )
的積極態度。 這些共同幫助將正則表達式分解為較小的部分,以便您可以了解不同的組件及其工作原理,而不僅僅是看到一個大而恐怖的正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.