我有这样的文字。
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()方法来提取我想要的内容?
答案 0 :(得分:1)
我用This solution帮助我解决问题。所以我的项目将是RegEx和IndexOf()方法的组合。
我不知道为什么RegEx在这件事上失败了。谢谢大家。
答案 1 :(得分: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
答案 2 :(得分:0)
您可以尝试[^+]+
或更具体地^[^+]+