match 什么都找不到时如何得到 false?

How to get false when match finds nothing?

当我运行这个代码时:

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

如果页面上没有匹配项,我会收到错误消息:

Result of expression 'foundUrlString' [null] is not an object

当没有匹配项而不是这个错误时,如何得到 "false"?

选中 null 以打印 falsetrue

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

你需要明白String.prototype.match的目的是什么。函数 match 将 return 一个数组,其中包含正则表达式中的整组匹配组。所以,如果你想验证一个字符串,最好的方法是使用函数 RegExp.prototype.test.

使用正则表达式中的函数RegExp.prototype.test

let savedPage = "EleFromStack";
console.log(/og:url.*="(http.*\.com)/i.test(savedPage));

根据现有内容,您可以在第二行添加 "truthy" 检查:

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

这将使 foundUrl 成为匹配的字符串或 false

这里有一个 trycatch 的例子,可能对你有帮助:

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));