0

コンテンツ部分がパターン (関数 1 のスタイルで、大文字と小文字を区別しない) に一致するページの最初のページの URL 部分を返すことができますが、ページが見つからない場合は空の文字列を返すにはどうすればよいですか?

例えば

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));
4

2 に答える 2

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

于 2013-11-09T22:29:32.660 に答える
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大文字と小文字を区別しない検索が必要な場合は、常に と の内容を小文字にすることができます。

于 2013-11-09T22:48:48.563 に答える