javascript - 使用一个 JavaScript 正则表达式捕获四个数字

标签 javascript regex

我想只用一个正则表达式捕获四个组。

我有这段文字:

PAY VALUES TO SUM - WITHOU NOTHING: 0.00 (IGNORE THE REST)
PAY VALUES TO SUM - ADD. 50 YEARS: 0.00 (IGNORE THE REST)
PAY VALUES TO SUM - ADD. 70 YEARS: 0.00 (IGNORE THE REST)
PAY VALUES TO SUM - ADD. 80 YEARS: 0.00 (IGNORE THE REST)

我想得到键后的数字:

PAY VALUES TO SUM - WITHOU NOTHING:
PAY VALUES TO SUM - ADD. 50 YEARS:
PAY VALUES TO SUM - ADD. 70 YEARS:
PAY VALUES TO SUM - ADD. 80 YEARS:

我只能使用一个正则表达式,所以我尝试了这种方法:

var text = 'PAY VALUES TO SUM - WITHOU NOTHING: 0.00 13º WORD WORD: 0.00' +
text += 'PAY VALUES TO SUM - ADD. 50 YEARS: 0.00 WORD WORD WORD: 0.00';
text += 'PAY VALUES TO SUM - ADD. 70 YEARS: 0.00 WORD WORD WORD: 0.00';
text += 'PAY VALUES TO SUM - ADD. 80 YEARS: 0.00 WORD WORD WORD WORD WORD WORD WORD: 0.00';

var reg = new RegExp(SOME REGEX);
var match = reg.exec(text);

console.log(match[1], match[2], match[3], match[4]);

结果是 0.00 0.00 .00 .00

这是我尝试使用的正则表达式:

new RegExp('PAY VALUES TO SUM - WITHOU NOTHING:' + '\\b.*?(?:\\d\\S*\\s+){1}(\\d\\S*)(?:\\s?\\d\\S*\\s+){14}(\\d\\S*)(?:\\s?\\d\\S*\\s+){14}(\\d\\S*)(?:\\s?\\d\\S*\\s+){29}(\\d\\S*)(?:\\s?\\d\\S*\\s+){41}(\\d\\S*)');

我的想法是在我可以传入的单词或数字之后捕获组。

但显然这是无效的。我怎样才能实现我的目标?

有时数字会改变。它们并不总是 0.00

我需要显式传递单词的名称和捕获组。由于文字比较大,上面只展示了一部分。

我有另一个正则表达式可以做我正在尝试的事情,但有另一个文本:

var text = 'PREV SOC 01 672 1.653.806,08 18.512,98 1.667.621,57 2.647,38 07 23 12.965,11 0,00 12.965,11 0,00'
    var reg = new RegExp('PREV SOC 01' + '\\b.*?(?:\\d\\S*\\s+){4}(\\d\\S*)(?:\\s?\\d\\S*\\s+){5}(\\d\\S*)', 'i');
    var match = reg.exec(text);

console.log(match[1]);
console.log(match[2]);

在这种情况下,我传递了单词“PREV SOC 01”和两个捕获组,一个用于捕获 1.667.621,57,另一个用于捕获 0,00.

我在其他文本中需要相同的内容:

var text = 'PAY VALUES TO SUM - WITHOU NOTHING: 0.00 13º WORD WORD: 0.00' +
text += 'PAY VALUES TO SUM - ADD. 50 YEARS: 0.00 WORD WORD WORD: 0.00';
text += 'PAY VALUES TO SUM - ADD. 70 YEARS: 0.00 WORD WORD WORD: 0.00';
text += 'PAY VALUES TO SUM - ADD. 80 YEARS: 0.00 WORD WORD WORD WORD WORD WORD WORD: 0.00';

我想传递 'PAY VALUES TO SUM - WITHOUT NOTHING:' 并在数字和数字后选择我想要的。

最佳答案

这是我对你的问题的解释:

var text = ''
+ 'PAY VALUES TO SUM - WITHOU NOTHING: 0.00 (IGNORE THE REST)\n'
+ 'PAY VALUES TO SUM - ADD. 50 YEARS: 0.00 (IGNORE THE REST)\n'
+ 'PAY VALUES TO SUM - ADD. 70 YEARS: 0.00 (IGNORE THE REST)\n'
+ 'PAY VALUES TO SUM - ADD. 80 YEARS: 0.00 (IGNORE THE REST)';

var re = /^PAY VALUES TO SUM - (?:WITHOU NOTHING|ADD\. \d+ YEARS): ([\d.]+).*$/gm;
document.write('<pre>' + text.replace(re, '$1').replace(/\n/g, ' ') + '</pre>');

// a little less specific

var re = /^PAY VALUES TO SUM - [^:]+: ([\d.]+).*$/gm;
document.write('<pre>' + text.replace(re, '$1').replace(/\n/g, ' ') + '</pre>');

关于javascript - 使用一个 JavaScript 正则表达式捕获四个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460978/

相关文章:

javascript - 如何以编程方式选择 Fabric.js 对象

asp.net - ajax请求返回json数组,IE6/7正在缓存它并且数据不新鲜

javascript - 使用 PHP 和 MySQL 的服务器端事件

javascript - 如何在插入的文本中包含换行符

ruby-on-rails - Rails 3 - 预编译文件夹中的所有 css、sass 和 scss 文件

python - 为什么 re.findall ('(ab)+' , 'abab' ) 返回 ['ab' ]= 同时 re.findall ('(ab)+?' , 'abab' ) 返回 ['ab' , 'ab' ]?

javascript - Tap 运算符 - 为什么由其他 2 个 Observable 扩展的 Observable 触发点击 2 次而不是 1 次?

MySQL去除非数字字符进行比较

c# regex 查找和替换重用匹配文本的一部分

java - 结束行字符在 Java 正则表达式中不起作用