尝试编写一些JavaScript正则表达式以匹配从下拉列表中选择选项时的价格。示例输出:Acrylic Print 12 x 16 inch (£95)
我将内容放在变量(price
)中,我只想在此处使用匹配来选择价格。我目前有以下内容:
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
答案 0 :(得分:1)
考虑以下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,})
找到并返回所有有效数字,这些数字也可能包含小数点后跟2位数。这不会只返回“。”
(
指示正则表达式返回在此开括号与下面的括号之间找到的任何内容[.][0-9]{1,2}
在小数点后面找到1或2个数字|
或[0-9]{1,}[.][0-9]{1,2}
小数点前有1个或更多数字后跟1或2个数字|
或[^.][0-9]{1,}
一个或多个不遵循小数点的数字(
close paran指示正则表达式停止返回任何其他匹配。这个紧密的括号与上面的空括号配对[)]
匹配输入文本中的近括号答案 1 :(得分:0)
您可以尝试使用(?<=\(.)\d+\.?\d*(?=\))
。这将展望未来并查看数字是否被()
包围。您可以看到此here的测试。
这假设格式相同,()
内没有空格。
把它分解成更小的碎片:
(?<=\(.)
- (
后面跟着一个字母的正面看法。这个字符用于捕获用于货币的符号。如果您使用了特定的货币标记,则可以将.
替换为预期的符号。目前,(
和数字开头之间的任何符号都可以使用。\d+\.?\d*
- 查找数字的正则表达式。这找到(至少)一个数字,可能后跟.
和第二组数字。如果它不仅仅是一个偶数设置的“美元”金额,它应该处理捕获价格中包含的任何变化。根据您使用的任何货币的小数位数,您可以将第二个\d*
更改为\d{x,y}
,其中小数位数允许的位数在x
之间y
。因此,对于小数点后的0到2位数,您将使用\d{0,2}
。(?=\))
- 展望未来,确保正则表达式后跟)
。这些有助于将正则表达式分解为更小的部分,这样您就可以了解不同的组件及其工作方式,而不仅仅是看到一个很长的可怕的正则表达式。