Извлечение части строки, окруженной знаками
Я пытаюсь написать функцию, которая будет печатать часть строки, если внутри этой строки найден определенный шаблон.
У меня есть массив строк, который содержит следующее:
pages = ["|stackru.com| The website serves as a platform for users to ask and answer questions." , "|reddit.com| A social news aggregation, web content rating, and discussion website"]
Когда пользователь вводит urlReturn(pages,"platform")
, функция должна вывести stackru.com
Я пытался, но безрезультатно, помощь будет принята с благодарностью!
4 ответа
for (idx in pages) {
if (pages[idx].indexOf('platform') != -1) {
console.log(pages[idx].substr(1, pages[idx].indexOf('|', 1) - 1))
}
}
Простое решение для функции, которую вы просите:
function urlReturn(pages, query) {
for(var i = 0; i < pages.length; i++) {
if (pages[i].indexOf(query) > 0) {
return pages[i].split("|")[1];
}
}
return '';
}
Эта функция ищет массив страниц, пока не найдет индекс, содержащий query
аргумент, затем использует строку "|"
в качестве разделителя, чтобы разделить значение индекса на другой массив и вернуть второй индекс этого массива, [1]
, который содержит подстроку, которую вы ищете. Если совпадений нет, возвращает пустую строку.
Проверка того, что это работает:
function urlReturn(pages, query) {
for(var i = 0; i < pages.length; i++) {
if (pages[i].indexOf(query) > 0) {
return pages[i].split("|")[1];
}
}
return '';
}
var pages = [
"|stackru.com| The website serves as a platform for users to ask and answer questions." ,
"|reddit.com| A social news aggregation, web content rating, and discussion website"
];
console.log(urlReturn(pages, "platform"));
var urlReturn = (pages, text) => pages.filter(page => page.indexOf(text) > -1).map(page => /\|([^|]*)\|/.exec(page)[1])
Я предлагаю вам посмотреть эти вещи в MDN. Там есть несколько хороших статей / документов о регулярных выражениях и коллекциях.
Следующий фрагмент может помочь вам охватить несколько результатов:
pages = ["|stackru.com| The website serves as a platform for users to ask and answer questions.",
"|reddit.com| A social news aggregation, web content rating, and discussion website",
"|lorem.com| Some site containing platform",
"|ipsum.com| Some site containing discussion"
];
// returns the array containing multiple result
function urlReturn(pages, query) {
var result = []
pages.forEach(function(page) {
var match = (new RegExp('^\\|(.+?)\\|.*' + query + '.*', 'g')).exec(page);
if (match !== null) {
result.push(match[1]);
}
});
return (result);
}
console.log(urlReturn(pages, "platform"));
// ["stackru.com", "lorem.com"]
console.log(urlReturn(pages, "discussion"));
// ["reddit.com", "ipsum.com"]
console.log(urlReturn(pages, "rating"));
// ["reddit.com"]