如何在子字符串之后或两个子字符串之间查找子字符串

时间:2013-04-06 14:13:45

标签: javascript regex

我有这个字符串:

包含两个子字符串的字符串:

srt=60389052 - OLGA YANETH PARRA PINILLA8390507 - VICENTE ARROYAVE ARANGO

所以,我知道如何找到第一个子串(数字+字)和第二个:

w1 = srt.match (/^\d+\D+)/);  //matches =  60389052 - OLGA YANETH PARRA PINILLA


w2 = srt.match (/\d+\D+$/);   //matches = 8390507 - VICENTE ARROYAVE ARANGO

没关系,但是如果字符串更长,我就有问题要匹配第二个子字符串,例如:

包含三个子字符串的字符串:

srt=60389052 - OLGA YANETH PARRA PINILLA8390507 - VICENTE ARROYAVE ARANGO777777 GERMAN CASTRO

我想找到这个:

8390507 - VICENTE ARROYAVE ARANGO

字符串有时只有两个子字符串,有些人有三个所以我必须总是找到第二个,无论字符串是2还是3个子字符串,我的意思是如果我在较大的字符串中使用w2不匹配我想要的子字符串,因为它会将最后一个子字符串发现为三个而不是第二个。

3 个答案:

答案 0 :(得分:3)

进行全局匹配并通过索引获取所需的子字符串(从0开始):

var matches = str.match(/\d+\D+/g);
console.log(matches[1]);  // "8390507 - VICENTE ARROYAVE ARANGO"

答案 1 :(得分:1)

我知道正则表达式不是最优雅的,但由于Javascript不支持lookbehind,这可能不是那么糟糕:

str.match(/^\d+\D+\d+\D+/)[0].replace(/^\d+\D+/,'');

此外,如果你不打算'匹配()' - 这也比上面更好:

str.replace(/\d+\D+(\d+\D+).*/,'$1');

干杯。

答案 2 :(得分:0)

您只需使用global flag

即可
console.log(srt.match(/\d+\D+/g))