为什么这个else语句首先被认为是上面的if值之一?

时间:2015-03-20 12:25:48

标签: javascript if-statement

此函数循环遍历字符串数组。如果字符串不是以#开头,则会使用p标记。如果字符串的前一个字符串是#* * *,则其中包含p标记,其中包含类ni

function replaceParagraphs(data) {
  data = data.split('\n\n')
  for (var i = 0; i < data.length; ++i) {
    if (data[i].match(/^[^#]/g)) {
      var content = data[i].replace(/\n(?=\w)/g, ' ').replace(/\n(?=$)/g, '')
      if (data[i - 1].match(/^#/g) || data[i - 1] === "* * *") {
        data[i] = '<p class="ni">' + content + '</p>'
      } else {
        data[i] = '<p>' + content + '</p>'
      }
    }
  }
  data = data.join('\n\n')

  return data
}

但似乎没有考虑data[i - 1] === "* * *",因为我最终输出了这样的输出:

## Test

<p class="ni">Lorem “ipsum?” dolor ‘sit!’ amet</p>

<p>Consetetur eirmod</p>

<p>* * *</p>

<p>“Ipsum?” “‘dolor’” sit! amet, consetetur eirmod tempor—invidunt ut labore</p>

可能是什么问题?

修改

哦,基于答案和评论,我意识到这是因为代码产生了<p>* * *</p>

我该怎么做才能防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

因为您在上一步中将* * *替换为<p>* * *</p>

条件data[i - 1].match(/^#/g) || data[i - 1] === "* * *"在第一次迭代时才可能成立。

考虑写一个新的数组,为了清晰起见并解决这样的问题。