gpt4 book ai didi

javascript - 如何使用正则表达式选择以下价格值?

转载 作者:行者123 更新时间:2023-11-29 10:33:56 24 4
gpt4 key购买 nike

我有一个场景,我试图从 Javascript 中的字符串中选择 Rs 的价格值,如下所示

The price was Rs.1000
The price was Rs 1000
The price was Rs.1000 - 5000
The price was Rs.1000 - Rs.5000
The price was Rs.50,000
The price was Rs 1,25,000 - Rs 2,45,000

现在很明显,考虑到输入有如此多的变化,制作一个非常长且繁琐的正则表达式并不是一个好主意。目前我把这个任务分成了4个部分第1部分//提取所有 Rs.1000 或 Rs 1000

var regex = new RegExp(/\brs\W*?(\d{1,7})\b(?![,\d])/i)

第 2 部分//提取所有 Rs.1000 - 2000 或 Rs 1000 - Rs 2000 及其任意组合

regex = new RegExp(/\brs\W*?(\d{1,7})\b(?![,\d])\s*?(?:-|to)\s*?(?:\brs\b\W*?)?(\d{1,7})\b(?![,\d])/i)

我需要捕获 1000 和 2000 等货币值来存储和处理它。

马上有几个问题,我在 JS 中的数组有大约 3000 个项目。我被困在涉及逗号的第 3 部分和第 4 部分。这是正确的方法吗?如何在存在逗号的笔划中获取值

这个正则表达式似乎同时捕获了普通数字和带逗号的数字,因为我只想要数值而不是与逗号的放置位置有任何关系,\brs\W*?\d.,?.\d\b我正在尝试在此表达式上向前迈出一步,以包括 1000 - 2000 种类型。有什么想法吗?

最佳答案

您可以使用正则表达式来完成此任务 - 您有一个用于在纯文本中查找重复模式的常规模式,只需动态创建模式即可。有 2 个主要 block ,一个将匹配粘在其他词上的价格(以便我们可以跳过该文本),另一个将仅在有效上下文中捕获价格。

whole regex看起来又丑又长:

/\Brs\W*(?:\d{1,7}(?:,\d+)*)\b(?:\s*(?:-|to)\s*(?:\brs\b\W*?)?(?:\d{1,7}(?:,\d+)*)\b)?|\brs\W*(\d{1,7}(?:,\d+)*)\b(?:\s*(?:-|to)\s*(?:\brs\b\W*?)?(\d{1,7}(?:,\d+)*)\b)?/gi

但是,很明显它由简单且易于编辑的构建 block 组成:

  • (\\d{1,7}(?:,\\d+)*)\\b - 数字部分
  • rs\\W*${num}(?:\\s*(?:-|to)\\s*(?:\\brs\\b\\W*?)?$ {num})? - 价格部分

请注意,在 RegExp 构造函数中进一步使用 .replace(/\((?!\?:)/g, '(?:') 将捕获组设为非捕获。

查看 JS 演示:

const num = "(\\d{1,7}(?:,\\d+)*)\\b";
const block = `rs\\W*${num}(?:\\s*(?:-|to)\\s*(?:\\brs\\b\\W*?)?${num})?`;
const regex = RegExp(`\\B${block.replace(/\((?!\?:)/g, '(?:')}|\\b${block}`, 'ig');
const str = `The price was Rs.1000
The price was Rs 1000
The price was Rs.1000 - 5000
The price was Rs.1000 - Rs.5000
The price was Rs.50,000
The price was Rs 1,25,000 - Rs 2,45,000
The price was dummytestRs 1,2665,000 - Rs 2,45,000`;
let m;
let result = [];
while ((m = regex.exec(str)) !== null) {
if (m[2]) {
result.push([m[1].replace(/,/g, ''), m[2]]);
} else if (m[1]) {
result.push([m[1].replace(/,/g, ''), ""]);
}
}
document.body.innerHTML = "<pre>" + JSON.stringify(result, 0, 4) + "</pre>";

关于javascript - 如何使用正则表达式选择以下价格值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com