正则表达式,如果else语句失败

时间:2018-12-06 04:39:44

标签: javascript jquery json regex

这是一个检查文本中是否存在链接的函数(如果有,将其替换为可点击的链接)

示例:

此图像的实际分辨率为3067x2276,而不是4381x3251。有关如何找出图像分辨率的信息,请参见this页。

function getTopComment(permalink) {
  var fullLink = "https://www.reddit.com" + permalink + ".json?sort=top";
  $.getJSON(fullLink, function foo(result) {
    var rawComment = result[1].data.children[0].data.body;
    var regExp = /\[(.*?)\]\(([^\)]+)\)/g;
    var matches = regExp.exec(rawComment);
    if (matches.length > 2) {
      var replace = `<a href="${matches[2]}">${matches[1]}</a>`;
      var cleanComment = rawComment.replace(matches[0], replace);
      $("#text").append('<p>' + cleanComment + '</p>');
    } else {
      $("#text").append('<p>hello</p>');
    }
  });
}
<body>
  <div class="container">
    <div id="art" class="img column1">
    </div>
    <div id="text" class="comment column2">
    </div>
  </div>
</body>

我尝试在chrome的javascript控制台上运行它,将$("#text").append ...替换为console.log("hello"),它可以工作。为什么在jsfiddle上不起作用?

2 个答案:

答案 0 :(得分:1)

使用try and catch代替

function getTopComment(permalink) {
    var fullLink = "https://www.reddit.com" + permalink + ".json?sort=top";
  $.getJSON(fullLink, function foo(result) {
    var rawComment = result[1].data.children[0].data.body;
    try {
        var regExp = /\[(.*?)\]\(([^\)]+)\)/g;
        var matches = regExp.exec(rawComment);
      var replace = `<a href="${matches[2]}">${matches[1]}</a>`;
      var cleanComment = rawComment.replace(matches[0], replace);
      $("#text").append('<p>' + cleanComment + '</p>');
    } catch(err) {
      $("#text").append('<p>' + rawComment + '</p>');
    }
  });
}

答案 1 :(得分:0)

如果正则表达式不匹配,则

exec返回null。先检查一下。

...
if (matches && matches.length > 2) {
...