(已解决-目前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
我的目的是有一个regex命令,可以稍后提取Width:
、Backing:
等之后的任何内容。
编辑:要求是我们不能使用任何javascript,只能使用regex
(?:Content|Backing|Width):s*(.*$)
在这里演示。
由于JavaScript正则表达式的限制,无法排除:
之前的位,但您可以只捕获捕获组1中匹配的内容。
您的示例有效,您只需要获取捕获组的值(括号中的值)。
注意:正则表达式中的m
标志表示:
多线;将开头和结尾字符(^和$)视为在多行上工作(即,匹配每行的开头或结尾(由\n或\r分隔),而不仅仅是整个输入字符串的开头或末尾)
此外,exec
方法返回一个数组(如果不匹配,则返回null
)。数组中的第一个项,索引0,是完全匹配项,之后的每个索引按顺序是每个捕获组。因此,索引1是第一个捕获组,这就是您在本例中想要的。
更新:我让它更通用。现在,它循环遍历一组数据标签,并获取每个标签后面的文本。
var dataLabels = ['Content','Backing','Weight','Width','Bolt Size','Maintenance'];
var input = 'CharacteristicsnContent: 100% PolyurethanenBacking: PolyesternWeight: 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]);
}
}