Как получить ложь, когда совпадение ничего не находит? - PullRequest
0 голосов
/ 23 октября 2018

Когда я запускаю этот код:

var foundUrlString = savedPage.match( /og:url.*="(http.*\.com)/i );
var foundUrl = foundUrlString[1];

Я получаю сообщение об ошибке, если на странице нет совпадений:

Результат выражения 'foundUrlString' [null] равенне объект

Как я могу получить "ложь", когда нет совпадений вместо этой ошибки?

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

Вот пример с try и catch, который может вам помочь:

function regex(savedPage) {
  try {
    var foundUrlString = savedPage.match(/og:url.*="(http.*\.com)/i);
    return foundUrlString[1];
  } catch (error) {
    return false;
  }
}
var savedPage1 = '<link property="og:url" content="http://test.com/test">';
console.log('savedPage1',regex(savedPage1));
var savedPage2 = '<link content="http://test.com/test">';
console.log('savedPage2',regex(savedPage2));
0 голосов
/ 23 октября 2018

Вам нужно понять, какова цель String.prototype.match.Функция match вернет массив с полным набором соответствующих групп в вашем регулярном выражении.Поэтому, если вы хотите проверить строку, лучше всего использовать функцию RegExp.prototype.test.

. Использовать функцию RegExp.prototype.test из регулярного выражения:

let savedPage = "EleFromStack";
console.log(/og:url.*="(http.*\.com)/i.test(savedPage));
0 голосов
/ 23 октября 2018

Исходя из того, что у вас есть, вы можете добавить «правдивую» проверку во второй строке:

var foundUrlString = savedPage.match( /og:url.*="(http.*\.com)/i );
var foundUrl = <b>!!foundUrlString</b> && foundUrlString[1];

, которая оставит foundUrl либо в виде совпадающей строки, либо false.

0 голосов
/ 23 октября 2018

Отметьте null для печати false или true.

        var savedPage = '';
        var foundUrlString = savedPage.match( /og:url.*="(http.*\.com)/i );
        var foundUrl = foundUrlString == null ? false : true;
        console.log(foundUrl );
...