1

我有这样的文字。

Mr John Smith , Mr James Smith                  +(21)-(21)-12345678, 12345678, 12345678                     +(21)-12345678, 12345678, 12345678        SomeTextHereAlso        +(21)-(22)-12345678                       www.somewebaddress.co.uk                            Some Title, Some Place , Some Town,Some Suburb,  City - 100000

我想在 javascript 中使用正则表达式提取这些字符串中的每一个。我找到了一些例子,今天早上他们奏效了。现在我不知道为什么他们不再工作了。

提取

Mr John Smith , Mr James Smith

我用过这个。

/\S(.*)\+/  and /\S(.*?)\+/

这没有用。我不知道为什么。

提取这个

+(21)-(21)-12345678, 12345678, 12345678                     +(21)-12345678, 12345678, 12345678        SomeTextHereAlso        +(21)-(22)-12345678     

我用过这个。

/\+(.*)(?=www.)/

这确实奏效了。

对于我使用的网址

/www(.*?)(?=\s\s)/

这也有效。

唯一的问题是第一个示例应该提取到第一个 + 之前的所有字符,但它会提取到最后一个 + 之前的所有字符。

我检查了http://gskinner.com/RegExr/?2tr5t并且我在这里展示的示例有效。自从我查看代码并没有发现任何错误以来,是否还有更多类似的示例可以帮助我。

如果正则表达式很好,那么我如何在这个例子中使用 IndexOf() 方法来提取我想要的东西?

4

3 回答 3

1

我用这个解决方案帮助我解决了我的问题。所以我的项目将结合 RegEx 和 IndexOf() 方法。

我不知道为什么 RegEx 在这件事上失败了。谢谢你们。

于 2012-06-19T00:45:21.363 回答
0

您可以尝试[^+]+或更具体地说^[^+]+

于 2012-06-18T16:27:03.907 回答
0

好吧,对于第一个示例,您可以使用否定字符类来禁止内部循环匹配“+”字符。

/\S([^+]*)\+/

至于提取匹配项,一个常见的模式是做类似的事情

var myPattern = /someregex/g;
var match;
while( (match=myPattern.exec(theString)) !== null ){
    console.log('the total match', match[0]);
    console.log('the first grouped parenthesis', match[1]);
    //and so on
}

例如,运行

var regex = /a(\d+)/g;
var str = ' a100 b200 a300';
var match;
while( (match=regex.exec(str)) !== null ){
    console.log(match)
}

印刷

["a100", "100"]
["a300", "300"]

如果您还有任何疑问,我强烈推荐MDN上的文档

于 2012-06-18T16:04:59.930 回答