获取匹配string后的数字和字符

我试图得到匹配的string后的值:

Empregados/Avulsos 2.912,30 Empregados/Avulsos 7.310,06 

有时在值中有一个string。

这是正则expression式可能吗?

我正在尝试像这样:

  var match = data.replace(/\s\s+/g, ' '); var match_two = match.match([\n\r][ \t]*Retenção Lei 9.711/98[ \t]*([^\n\r]*)); console.log(match_two); 

首先我用一个replace所有的空格。 然后我试着得到'Retenção Lei 9.711/98' 。 但是输出是'2'

我想做一个正则expression式,在这些例子中总是会得到下一个单词或数字:

 Hour: get 12:12 Data: get 24/08 Solicitação get 2.912,30 Empregados/Avulsos get 1.452,00 Palavras separadas get 2.912,30 

话:

 'Solicitação', 'Retention xxx 9.999/99' 'Compensation' 'TET': 'VALUE - SOCIAL PREVÎ', 'VALUE - OTHERS', 'TOTAL TO GET', 'TABLES', 'COD GPX:', 'FXGE:', 'ALIX DC:', 'RXG AJUST', 'DATA:', 'HOUR:', 

我会解决以下问题。 你有一段文字包含单词和各种数字。 给定一个任意的子string,你想find该子string的第一个出现,并提取它后面的第一个数字。

例如,如果子string是'Total' ,那么您可能想要使用这个正则expression式:

 /Total.*?(\d\S*)/ 

让我分解一下:

  • Total是你正在寻找的子string
  • .*表示您正在查找零次或更多次的任何字符
  • ? 意味着你想匹配尽可能less的字符
  • (打开捕获组:这些是你想要提取的字符
  • \d匹配一个数字
  • \S*匹配除空白字符以外的任何内容,零次或多次
  • )closures了捕获组

请注意. 匹配除\n\r类的行尾字符之外的任何字符。 如果您的文本包含这些字符,则在应用上述正则expression式之前,您需要用可见空格字符( ' ' )replace它们。 如果将文本分配给variablestext ,则可以执行以下操作,将所有空白字符(包括换行符)replace为可见的空格:

 text = text.replace(/\s/g, ' '); 

更重要的一点是/Total.*?(\d\S*)/是一个固定的正则expression式。 如果你想为任何给定的子string做一个正则expression式,你必须用RegExp构造函数编译它:

 var re = new RegExp(substring + '.*?(\\d\\S*)'); 

请注意,我们正在向构造函数传递一个string,所以我们必须在指定正则expression式时使用斜杠。 我们在字面正则expression式中写了\d\S ,我们必须在string中写\\d\\S

我们可以使用exec方法在一个string上执行编译的正则expression式,testing结果是否为null ,最后得到捕获组的内容:

 var match = re.exec(text); if (match === null) { return ''; } return match[1]; 

下面的代码片段在一个名为getNumberAfterSubstring(substring, text)的函数中实现了这个过程。 点击代码下方的蓝色button,看它是在一段样本文本和一些样本子string上运行的。

 function print(s) { document.write(s + '<br />'); } function getNumberAfterSubstring(substring, text) { var re = new RegExp(substring + '.*?(\\d\\S*)'), match = re.exec(text); if (match === null) { return ''; // If no match is found, return empty string. } return match[1]; // Otherwise return first parenthesized group. } var text = "Tabela 25 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies ultricies auctor. Donec sodales pharetra ante, vitae suscipit metus mollis quis. Lorem ipsum dolor sit amet, Retention Law 0.000/00 consectetur adipiscing elit. Nunc nisl dui, Compension 00,00 ullamcorper eget posuere et, faucibus ut leo. Ut tellus nisi, lobortis eget nibh id, laoreet tincidunt lacus. Integer eget libero Value - Social prevî: 715,86 ut nulla vestibulum viverra eget sit Value - Others: 715,86 amet nisi. Suspendisse potenti.\nCurabitur ligula felis, Data: 02/02/2011 scelerisque in consequat et, tempor non ipsum. Donec euismod, turpis ut accumsan lobortis, lectus felis ullamcorper nibh, et pretium lectus nisl at enim. Total to pay 863,37 Nullam faucibus massa vitae nulla ultrices, eu sollicitudin justo imperdiet. Phasellus at est scelerisque, egestas diam et, rutrum dui. Hour: 15:44:58 Nunc sagittis hendrerit dui, sit amet congue arcu efficitur eu. Praesent hendrerit ut nibh vel vehicula. Morbi mollis enim ex, at mollis libero pellentesque quis. Etiam sed bibendum nisi. COD GPS: 2100 In hac habitasse platea dictumst. Morbi ac condimentum eros, in egestas tellus."; text = text.replace(/\s/g, ' '); // Replace line-ending characters. text = text.toLocaleLowerCase(); var substrings = ['Retention Law', 'Compension', 'VALUE - SOCIAL PREVî', 'Total', 'Tabela', 'Hour', 'Data']; for (var i = 0; i < substrings.length; ++i) { var substring = substrings[i].toLocaleLowerCase(); print(substring + ': ' + getNumberAfterSubstring(substring, text)); } 

您的RegEx捕获组不包含小数或逗号,但数字值包含这些。

 var res = /Empregados\/Avulsos ([\d\.,:\/]+)/.exec(str); if(res[1]){ var values = res[1].split(","); } 

在正则expression式中, \ dfind数字,而不是数字。 您示例中的数字可以由几位数字,小数点,逗号,冒号和斜线组成。

只要确保包含在你的正则expression式的东西。