我有这个脚本,它将每个句子的第一个字母大写:
String.prototype.capitalize = function() {
return this.replace(/.+?[\.\?\!](\s|$)/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.slice(1);
});
};
我想添加一个例外:.
,?
和!
字符后面的第一个单词如果字符前面有{{1},则不应该大写单词。
我的案例来自xy
,capitalization of string xy. is not correct.
我想要结果:Capitalization of string xy. Is not correct.
有什么想法吗?
答案 0 :(得分: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/
答案 1 :(得分:1)
你可以用这个:
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
字来解决这个问题,但这会变得更加复杂。