1

我有这个字符串:

带有两个子字符串的字符串:

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 - 维森特·阿罗亚夫·阿朗戈

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

4

3 回答 3

3

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

var matches = str.match(/\d+\D+/g);
console.log(matches[1]);  // "8390507 - VICENTE ARROYAVE ARANGO"
于 2013-04-06T14:21:28.073 回答
1

我知道正则表达式不是最优雅的,但由于 Javascript 不支持后视,这可能还不错:

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

此外,如果您不打算使用 'match()' - 这也比上面更好:

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

干杯。

于 2013-04-06T14:21:06.523 回答
0

您可以简单地使用全局标志

console.log(srt.match(/\d+\D+/g))
于 2013-04-06T14:25:41.050 回答