正则表达式匹配句子结尾标点符号而不删除定界符并加入<p>标记

时间:2019-09-28 02:45:33

标签: javascript regex

我需要匹配文本文件中的所有句子结尾标点符号,使其通过json格式的ajax传递到html页面,同时保留定界符并将<p>标记附加到每个句子。

当前代码如下:

var xhr = new XMLHttpRequest();

xhr.onload = function() {
  if(xhr.status === 200) {
    responseObject = JSON.parse(xhr.responseText);

    var newContent = '';

    // text file html encasing
    newContent += '<p>' + responseObject.content + '</p>';

    // regex
    matchedPunctuation = newContent.match(/.*?[?!.]/g);

    // add element
    document.getElementById('myptag').innerHTML = matchedPunctuation.join('<p>');


  }
};

xhr.open('GET', 'http://127.0.0.1:5000/jsonstory', true);
xhr.send(null);

当我的句子如下时,这使我失败:

短文本文件示例.......今天是美好的一天。戴夫说:“是的。”

上面的代码将<p>标记正确地添加到第一句,该标记将直接在句点之后但在下一句开始之前。

第二句将它们添加到句号和引号.<p></p> "<p></p>之间,这将引号与应保留在我的html文件中的句子分开放置。任何想法或解决方案将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:0)

尝试使用此正则表达式.*?[?!.]"?如果存在双引号,则"?使其成为可选要求。如果是,它将首先使用它进行比赛,否则,它将继续进行。

希望这会有所帮助。

var xhr = new XMLHttpRequest();

xhr.onload = function() {
  if(xhr.status === 200) {
    responseObject = JSON.parse(xhr.responseText);

    var newContent = '';

    // text file html encasing
    newContent += '<p>' + responseObject.content + '</p>';

    // regex
    matchedPunctuation = newContent.match(/.*?[?!.]"?/g);

    // add element
    document.getElementById('myptag').innerHTML = matchedPunctuation.join('<p>');


  }
};

xhr.open('GET', 'http://127.0.0.1:5000/jsonstory', true);
xhr.send(null);