Исключение из заглавных букв в предложении
У меня есть этот сценарий, который с заглавной буквы первой буквы каждого предложения:
String.prototype.capitalize = function() {
return this.replace(/.+?[\.\?\!](\s|$)/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.slice(1);
});
};
Я хочу добавить исключение: первое слово в предложении после .
, ?
, а также !
символы не должны начинаться с заглавной буквы, если перед символом стоит xy
слово.
В моем случае от capitalization of string xy. is not correct.
будет Capitalization of string xy. Is not correct.
Я хочу в результате: Capitalization of string xy. is not correct.
Есть идеи?
2 ответа
Так как Javascript не поддерживает lookbehinds, вам будет гораздо проще пройтись по написанной вами функции и затем произвольно исправить ошибочно прописные биты обратно в нижний регистр.
Рабочий пример:
String.prototype.capitalize = function(exception) {
var result = this.replace(/.+?[\.\?\!](\s|$)/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.slice(1);
});
var r = new RegExp(exception + "\\.\\s*\(\\w+\)", "i");
return result.replace(r, function(re) { return(re.toLowerCase()) });
};
alert("capitalization of string xy. is not correct.".capitalize("xy"));
Вы, вероятно, могли бы улучшить его для обработки массива исключений или даже использовать регулярное выражение.
Вот рабочий пример: http://jsfiddle.net/remus/4EZBb/
Вы можете использовать это:
String.prototype.capitalizeSentencesWithout = function(word) {
return this.replace(/.+?[\.\?\!](?:\s|$)/g, function (txt, pos, orig) {
if (orig.slice(pos-word.length-2, pos-2) == word)
return txt;
return txt.charAt(0).toUpperCase() + txt.slice(1);
});
};
Использование:
> "capitalization of string xy. is correct.".capitalizeSentencesWithout("xy")
"Capitalization of string xy. is correct."
Вы также можете решить эту проблему, сделав .+?
выражение жадно поглотить xy
словом, но это будет гораздо сложнее.