2015-08-26 59 views
2

我有一些字符串类似如下:比赛第一和停止

Self-Service Portal - Company Name1 - Portal Header 
Self-Service Portal - Company Name2 - Portal Footer 
Self-Service Portal - Company Name1 - Portal Script 

我想提取的公司名称。所以我做了以下的正则表达式的Javascript

var matchPattern = function(sourcestring) { 
 
var re = /^.+\s+?-\s+?(.+?)\s+?-\s+?.+$/; 
 
    var matches = re.exec(sourcestring); 
 
    if(matches != null){ 
 
     return matches[1]; 
 
    } 
 
    \t else{ 
 
     return 'Not Found'; 
 
    \t } 
 
} 
 

 
alert(matchPattern('Self-Service Portal - Company Name1 - Portal Header')); 
 
alert(matchPattern('Self-Service Portal - Company Name1 - Portal Footer')); 
 
alert(matchPattern('Self-Service Portal - Company Name2 - Portal Header')); 
 
alert(matchPattern('Self-Service Portal - Company Name 2 - Portal - Footer'));

这个工作,除了最后一个字符串“自助服务门户 - 公司名称1 - 门户网站 - 页脚”。 有人可以告诉我我做错了什么? 感谢

回答

3

我建议拆分字符串以-

var matchPattern = function(sourcestring) { 
 
    var re = /\s+-\s+/; 
 
     var matches = sourcestring.split(re); 
 
     if(matches != null){ 
 
      return matches[1]; 
 
     } 
 
     \t else{ 
 
      return 'Not Found'; 
 
     \t } 
 
    } 
 

 

 
    document.write(matchPattern('Self-Service Portal - Company Name1 - Portal Header') + "<br/>"); 
 
    document.write(matchPattern('Self-Service Portal - Company Name1 - Portal Footer') + "<br/>"); 
 
    document.write(matchPattern('Self-Service Portal - Company Name2 - Portal Header') + "<br/>"); 
 
    document.write(matchPattern('Self-Service Portal - Company Name 2 - Portal - Footer') + "<br/>");

你的正则表达式可以工作,如果你使用延迟匹配与第一.+预期:

^.+?\s+?-\s+?(.+?)\s+?-\s+?.+$ 

demo,但它是非常无效的因为它跟随着很多回溯,因为.+?也可以匹配\s+?

+0

感谢您的回答,以及与懒惰匹配的评论。那么我会回答你的答案。即使身份证这是一次性批处理脚本,我不必关心效率 – CodeHacker

+0

我看到。我的意思是说你应该非常小心''''''''+。+'和他们懒惰的对手。祝你好运。 –