如果能保證句子之間 一定會有空格,那么可以這樣var s = 'the price is 32.15. 25 is mine!';
m = s.match(/(?!\s+).+?[\.?!](?=(\s|$))/g);
console.log(m);
如果不行,先不管語句是否有誤,如下面這樣,那就不好玩了var s = 'the price is 32.15.25 is mine!';

解决方案 »

  1.   

    那怎么区分两个正常以 英语句号断句的句子?
    This is a book. That is a book, too. 
      

  2.   

    我需要能一句句取出句子,所以以 英语句号,问号,!来作为pattern识别,但是,我又需要区分小数点,不把它作为句号来断句。
      

  3.   

    var str = "This is a book. That is a book, too. this book 2.34.";
            var rs = str.replace(/(\d)([.])(\d{1,})/,"$1。$3");
            var m = rs.match(/([^.?!])+/g);
            for (var i = 0; i < m.length; i++) {
                m[i] = m[i].replace(/[。]/g,'.');
            }
            console.log(m)
    另外一种解法 就是把小数点的点号替换掉 用英文的句话匹配 再将结果中的替换符还原
      

  4.   

    alert('the price is 3.23$.'.match(/[^?!]+?(?=[?!]|\.(\D|$))/))
      

  5.   

    针对本例而言,我只是简单的认为 结束标记. 后面肯定不是数字,如果为数字 则按照价格处理,也就是视为语句未结束如果非要那种乱杂的个例  比如  the price is 3.23$.3 is a number.3.4.5.3  真的很难区分
      

  6.   

    这样写点号匹配到下一句去了LZ要匹配的是句子,至于标点符号未提及,如果非要较真的话,可以变通一下alert('the price is 3.23$.'.match(/[^?!]+?([?!]$|\.(?=(\D|$)))/))