如何在内容部分与模式匹配的页面中返回第一页的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));
答案 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')); // ''
答案 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
和内容。