我正在尝试将每个句子的开头转换为大写字符。到目前为止,这是有效的。
但是我还需要定义一些例外(缩写)。在缩写之后,下一个单词不应转换为大写。

这是我尝试过的,但是不起作用:

const abbrevs = ['ign.'];
var regex = new RegExp('(?!' + abbrevs.join('|') + ').+?(?:[.?!]\s|$)', 'g');
string.replace(regex, function(s) { return s.charAt(0).toUpperCase() + s.slice(1); })




this ign. is an example. this should get capitalized


应得:

This ign. is an example. This should get capitalized

最佳答案

你可以 :


'ign.''abbreviation<ign>'替换'some_keyword_probably_not_found_in_strings<ign>'和所有其他缩写
将大写字母应用于每个句子的开头
将每个abbreviation<ign>转换回ign.


这是一个例子:



const abbrevs = ['ign', 'abc'];
var string = "this ign. is an example. this abc. is another example. this should get capitalized.";

console.log(string);

abbrevs.forEach(function(abbrev) {
  string = string.replace(new RegExp(abbrev+'\.', 'g'), 'abbreviation<'+abbrev+'>');
});

console.log(string);

function applySentenceCase(str) {
    return str.replace(/.+?[\.\?\!](\s|$)/g, function (txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
}
string = applySentenceCase(string);

console.log(string);

string = string.replace(new RegExp('abbreviation<(.*?)>', 'g'), "$1.");

console.log(string);

关于javascript - 正则表达式:定义一些替换异常(exception),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41063427/

10-11 13:50