我试图从以下任何一项中提取价格:
Item price: £93.00 Item number: 265722305071
Item number: 265722305071 Item price: $93.00
£93.00£93.00
265722305071£93.00 foo
265722305071-93.00EURO目标回应: 93.00
以下是我的一些尝试:
/^(\d*([.,](?=\d{3}))?\d+)+((?!\2)[.,]\d\d)?$/
/^£?[1-9]{1,3}(,\d{3})*(\.\d{2})?$/
/^£?(([1-9]{1,3}(,\d{3})*(\.\d{2})?)|(0\.[1-9]\d)|(0\.0[1-9]))$/
/^\xA3?\d{1,3}?([,]\d{3}|\d)*?([.]\d{1,2})?$/
/^\$?[0-9][0-9,]*[0-9]\.?[0-9]{0,2}$/i
(?=.*?\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$
/(?=.)^\$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(\.[0-9]{1,2})?$/
[0-9]+\.[0-9][0-9](?:[^0-9a-zA-Z\s\S\D]|$)
^\d+\.\d{2}$我将使用单独的regex提取货币。
问题可能在于不知道使用的是什么regex引擎。我使用的工具是n8n,但我找不到它使用的regex味道。其他一切都在使用Javascript,这就是我开始的地方。
发布于 2022-06-15 17:23:57
您可以使用这正则表达式。
(?:[$£])(\d+(?:\.\d+)?)此正则表达式将捕获以$或£符号开头的所有浮点数和整数。
Regex解释
(?:非捕获群[$£]匹配$或£符号)闭非捕获群(捕获组\d+匹配一个或多个数字(?:非捕获群\.\d+将一个或多个数字与. (点)前缀匹配- `)` Close non-capturing group
- `?` The previous group can exist or not)紧群编辑注意事项
正如您在下面提到的,字符串后面可以是EUR或€,甚至可以从这些组件开始。因此,您可以使用(?<=[$£€]|EUR\s?)\d+\.\d+|\d+\.\d+(?=[$£€]|\s?EUR)。
function extractPrice(string) {
let match = string.match(/(?<=[$£€]|EUR\s?)\d+\.\d+|\d+\.\d+(?=[$£€]|\s?EUR)/);
return match ? match[0] : match;
}
console.log(extractPrice("Item price: £93.00 Item number: 265722305071"));
console.log(extractPrice("Item number: 265722305071 Item price: $93.00"));
console.log(extractPrice("£93.00£93.00"));
console.log(extractPrice("265722305071£93.00 foo"));
console.log(extractPrice("265722305071EUR93.00"));
console.log(extractPrice("265722305071EUR 93.00"));
console.log(extractPrice("265722305071 93.00 EUR"));
console.log(extractPrice("265722305071 93.00€"));
https://stackoverflow.com/questions/72635348
复制相似问题