如何用'。'来.slice()文本。 '!' '?'不失去他们? (regexp)

时间:2019-04-17 16:43:32

标签: javascript jquery html5

如何将regexp与.slice()一起使用,以便将标点符号保存在每一行的末尾?可以说我有一个看起来像这样的描述:

<div class="desc">We have text. About specific product? Or feature!</div>

我希望它看起来像这样:

<div class="desc">
<ul>
<dd>We have text.</dd>
<dd>About specific product?</dd>
<dd>Or feature!</dd>
</ul>

对我来说,jQuery在这种特定情况下是可以的,所以我建立了这个:

jQuery(function() {
    var description = jQuery('div.desc');
    var sentences = description.text().split(/\.|\?|\!\s+/g),
    $wrapper = description.empty();

    jQuery.each(sentences, function(_, sentence) {
          jQuery('<dd>', {text: sentence}).appendTo($wrapper);
        });
        jQuery('.desc > dd').wrapAll("<ul></ul>");
        jQuery('.desc > ul > dd:last-child').remove();
});

它可以很好地执行EXEPT->按“”进行切片。 “!” “?” -删除这些标志。我需要保留它们。

我还考虑过类似的事情:

var myStr = 'We have text. About specific product? Or feature!';
var strArray = myString.split('.');

之后,我可以使用它(例如):

alert('!' + strArray[1]);

但事实是描述总是不同的。因此,如果在一页上显示“?”符号将在第一个句子的末尾->第二页将在第六个句子之后出现。

2 个答案:

答案 0 :(得分:3)

您可以使用match代替split

var string = 'We have text. About specific product? Or feature!';

console.log(string.match(/.*?[.!?](\s+|$)/g));

答案 1 :(得分:-1)

如果您在正则表达式中使用捕获组,它将保留匹配的字符。

let myStr = 'We have text. About specific product? Or feature!';
let strArray = myStr.split(/([.?!])/);

console.log(strArray );