返回内容部分与模式匹配的第一个项目的URL

时间:2013-11-09 22:15:42

标签: javascript

如何在内容部分与模式匹配的页面中返回第一页的url部分(在函数1的样式中,不区分大小写)但如果没有找到页面则返回空字符串?

e.g。

  

url1(pages,“GREAT”)返回“www.xyz.ac.uk”

     

url1(pages,“xyz”)返回“”

到目前为止,这是我的代码:

var pg = [ "|www.cam.ac.uk|Cambridge University offers degree programmes and world class research." , "!www.xyz.ac.uk!An great University" , "%www%Yet another University" ];
var pt = "great";

function url1(pages, pattern) {
    var result = "";
    for (x in pages) {
        current = pages[x].split(pattern);
        result = current[1];
    }
    return result;
}

alert(url1(pg, pt));

2 个答案:

答案 0 :(得分:2)

试试这个:

var pg = [ "|www.cam.ac.uk|Cambridge University offers degree programmes and world class research." , "!www.xyz.ac.uk!An great University" , "%www%Yet another University" ];

function find(pages, pattern) {
  var i, l, page, arr;
  pattern = pattern.toLowerCase();
  for(i=0, l=pages.length; i<l; i++) {
    page = pages[i];
    arr = page.split(page[0]);
    if(arr.slice(2).join(page[0]).toLowerCase().indexOf(pattern) >=0) {
      return arr[1];
    }
  }
  return '';
}

console.log(find(pg,'great')); // 'www.xyz.ac.uk'
console.log(find(pg,'xyz')); // ''

在这里小提琴:http://jsbin.com/uGebeQi/2/edit

答案 1 :(得分:0)

这是使用正则表达式的另一种解决方案。我觉得这比盲目分裂第一个字符要好一些,因为内容总是可以包含第一个字符。

注意:已接受的答案已得到纠正。

function url1(pages, pattern) {
    var rx = /^(.)(.+?)\1(.+)/,
        i = 0,
        len = pages.length,
        matches;

    for (; i < len; i++) {
        if ((matches = pages[i].match(rx)) && matches[3].indexOf(pattern) !== -1) 
            return matches[2];
    }

    return '';
}

//www.xyz.ac.uk
url1(['!www.xyz.ac.uk!An great University! The best in the world!'], 'best');

如果您不想使用不区分大小写的搜索,则始终可以小写pattern和内容。