我正在尝试将每个句子的开头转换为大写字符。到目前为止,这是有效的。
但是我还需要定义一些例外(缩写)。在缩写之后,下一个单词不应转换为大写。
这是我尝试过的,但是不起作用:
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/