正则表达式:如何在字符串后获取所有内容?

时间:2016-05-02 18:01:49

标签: regex

(已解决 - 目前无法使用Javascript Regex排除部分所选字符串截至此发布日期)

搜索一下,无法找到这个案例的明确例子。

目前我有这个文本块:

Characteristics
Content: 100% Polyurethane
Backing: Polyester
Weight: 20 oz/ly (620 gr/lm)
Width: 54" (137cm)
Bolt Size: 35 yards (32 m)
Maintenance: W/B-Clean w

我希望在Content:之后提取任何文字(注意空格)

这样就可以提取100% Polyurethane

目前我有这个 - (但它包括Content:): http://regexr.com/3dbct

我的目的是拥有一个可以在Width:Backing:等之后提取任何内容的正则表达式命令。

编辑:要求我们无法使用任何javascript,只有正则表达式

2 个答案:

答案 0 :(得分:1)

(?:Content|Backing|Width):\s*(.*$)

Demo here

由于JavaScript正则表达式限制,无法排除:之前的位,但您可以捕获捕获组1中匹配的内容。

答案 1 :(得分:0)

您的示例有效,您只需要获取捕获组的值(括号中的内容)。

注意:正则表达式中的m标志表示:

  

多行;将开始和结束字符(^和$)视为多行(即匹配每行的开头或结尾(由\ n或\ r分隔),而不仅仅是整个输入字符串的开头或结尾)< / p>

此外,exec方法返回一个数组(如果没有匹配则返回null)。数组中的第一项(索引0)是完全匹配,之后的每个索引都是按顺序的每个捕获组。因此,索引1是第一个捕获组,在这种情况下就是你想要的。

更新:我使它更通用。现在它循环遍历一组数据标签,并在每个数据标签之后抓取文本。

var dataLabels = ['Content','Backing','Weight','Width','Bolt Size','Maintenance'];

var input = 'Characteristics\nContent: 100% Polyurethane\nBacking: Polyester\nWeight: 20 oz/ly (620 gr/lm)\nWidth: 54" (137cm)\nBolt Size: 35 yards (32 m)\nMaintenance: W/B-Clean w';

var regex, i, match;

for(i = 0; i < dataLabels.length; i++) {
    regex = new RegExp(dataLabels[i] + ': (.*)', 'm');

    match = regex.exec(input);

    if(match !== null) {
        // do something with this
        console.log(dataLabels[i] + ' = ' + match[1]);
    }
}