#javascript #jquery
#javascript #jquery
Вопрос:
Я запускаю это регулярное выражение .match()
:
var pattern = /property="og:description"scontent="(. ?)"/;
var matches = data.match(pattern);
if (matches[1]) {
var = description = matches[1];
}
Но иногда я получаю эту ошибку:
Uncaught TypeError: matches is null
Что я могу сделать, чтобы проверить, matches[1]
не пусто ли?
Что я пробовал до сих пор
Я попробовал это:
if (matches amp;amp; matches[1]) {
И
if (matches.length amp;amp; matches[1].length) {
И
if (matches[1] != null) {
И
if (matches[1] != undefined amp;amp; matches[1] != null) {
Все еще иногда получаю эту ошибку. Очевидно, я что-то упускаю.
Комментарии:
1. Я думаю, что есть синтаксическая ошибка, если это из полного примера. Вы назначаете var, который является зарезервированным словом. Может ли это быть причиной? В противном случае нет проблем с тем, как вы проверяете это в примере первой попытки, который вы привели.
Ответ №1:
Удалите [1]
from matches
, когда убедитесь, что у него есть значение. Ошибка заключается в том, что вы пытаетесь получить доступ к нулевому значению по индексу.
let pattern = /property="og:description"scontent="(. ?)"/;
['foobar', 'property="og:description" content="abc"'].forEach(data => {
let matches = data.match(pattern);
let description = 'no match';
if (matches)
description = matches[1];
console.log(description);
});
Комментарии:
1. Но теоретически это тоже не
matches amp;amp; matches[1]
сработало бы?2. На самом деле это неверно, если вы получаете доступ к совпадениям amp;amp; matches[1], вы все равно можете выполнить то же условие. Если вы попробуете, этот код будет успешным.
3. Вы правы — моя ошибка. Первое совпадение, если таковое имеется, является полной совпадающей строкой. Так что да,
matches amp;amp; match[1]
это тоже сработает. Я обновил ответ, чтобы предоставить логику соответствия / отсутствия соответствия