Javascript 如何使用regex选择以下价格值?

Javascript 如何使用regex选择以下价格值?,javascript,regex,Javascript,Regex,我有一个场景,我试图从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 现在很明显,考虑到输入的多样性,制作一个很长很麻烦的正则表达式不是一个好主意

我有一个场景,我试图从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个部分 第一部分 //提取所有Rs.1000或Rs.1000

var regex = new RegExp(/\brs\W*?(\d{1,7})\b(?![,\d])/i)
第二部分 //提取所有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种类型。有什么想法吗?

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

这幅画看起来又丑又长:

/\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
但是,很明显,它由简单且易于编辑的构建块组成:

  • (\\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”;
常量块=`rs\\W*${num}(?:\\s*(?:-| to)\\s*(?:\\brs\\b\\W*?)?${num})`;
常量regex=RegExp(`\\B${block.replace(/\((?!\?:)/g,(?:')}\\\\B${block}`,'ig');
const str=`价格是1000卢比
价格是1000卢比
价格为1000-5000卢比
价格为1000卢比至5000卢比
价格是50000卢比
价格为1,25000卢比至2,45000卢比
价格为12665000卢比-24500卢比`;
让m;
让结果=[];
while((m=regex.exec(str))!==null){
if(m[2]){
结果.push([m[1]),replace(/,/g',),m[2]];
}else如果(m[1]){
结果.推送([m[1]),替换(/,/g',),“”];
}
}

document.body.innerHTML=“”+JSON.stringify(结果,0,4)+“;
您只需要数字还是还需要“Rs”字符串?试试看,我不明白为什么
价格是dummytestRs 1,25000-Rs 2,45000
不应该匹配。不匹配它是不可能的。这会使正则表达式变大。很抱歉,我之前的小提琴中有一个错误-看。带有Rs的价格是匹配的,但不是捕获的,所以我们省略它们。