使用字符串方法在文本中查找标点符号

时间:2019-04-23 00:03:09

标签: javascript regex string

如何确定字符串中何时出现标点符号(?!;。)或“ <”字符。我不想使用数组或比较任何字母,但尝试使用字符串方法解决它。像这样:

var text = corpus.substr(0, corpus.indexOf(".");

好吧,如果我明确指定字符(例如点字符),它就可以正常工作。解析的问题在于,如果循环中有一个较长的文本,我将不知道句子的结尾如何,无论是问号还是感叹号。我尝试了以下操作,但无效:

var text = corpus.substr(0, corpus.indexOf(corpus.search("."));

我想遍历一个长字符串,并使用找到的每个标点符号将其用作句子结尾字符。

你知道我该如何解决我的问题?

2 个答案:

答案 0 :(得分:0)

使用正则表达式:

var text = corpus.split(/[(?!;.)<]/g);

答案 1 :(得分:0)

您可以从RegExp开始,对每个字符进行加权,然后本质上比较ASCII码。拆分是另一种方式(仅在上方发布)。

RegExp解决方案

function getTextUpToPunc( text ) {
    const regExp = /^.+(\!|\?|\.)/mg;
    for (let match; (match = regExp.exec( text )) !== null;) { 
          console.log(match);
    }
}
getTextUpToPunc(
    "what a chunky funky monkey! this is really someting else"
)

这里的主要优点是,您无需遍历整个字符串并通过执行regExp.exec( text )来控制迭代。

先前发布的split解决方案可以使用,但split将遍历整个字符串。通常,这不是问题,但是如果您的字符串是成千上万个字符,并且您执行了大量此操作,那么考虑性能就很有意义。

如果此函数可以多次运行,则性能的一个小改进就是可以记住RegExp的创建:

    const regExp = /^.+(\!|\?|\.)/mg;

变成这样

function getTextUpToPunc( text ) {
    if( !this._regExp ) this._regExp = /^.+(\!|\?|\.)/mg;;

    const regExp = this._regExp;
    for (let match; (match = regExp.exec( text )) !== null;) { 
          console.log(match);
    }
}
相关问题