Извлечение части строки, окруженной знаками

Я пытаюсь написать функцию, которая будет печатать часть строки, если внутри этой строки найден определенный шаблон.

У меня есть массив строк, который содержит следующее:

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"]

Другие вопросы по тегам