Proper Case JavaScript 函数






3.33/5 (3投票s)
一个单行代码片段,可以将字符串转换为首字母大写形式(空格后的每个字母都大写)。
引言
长期以来,我一直在寻找一个简单的代码片段,可以将字符串转换为其首字母大写形式,编辑器中称为“proper case”。 在找不到任何东西之后,我尝试一次解析一个字符,然后根据发现进行切换; 我还尝试拆分字符串(使用空格作为分隔符),更改每个元素的第一个字符,然后将数组粘合回字符串(使用空格)。 我能够找到需要替换的字符,这些字符位于字符本身或它们在字符串中的位置(索引)的数组中,但是然后需要一些复杂的代码才能将整个内容重新组合在一起。
这些尝试效果很好,但我仍然致力于使用简单的replace
方法解决方案。 在发现 JScript 5.5 将函数作为 replaceText
参数后,我终于找到了它。
实现
首先,让我们回顾一下关于正则表达式的知识。 我们必须找到空格后的每个字符,并记住这些位置。 幸运的是,正则表达式对象确实在一组属性中捕获了 9 个“子匹配”或出现项。 用于捕获空格后任何单个字符的正则表达式语法如下
/\s(.)/g
我宁愿使用空格说明符\s,而不是代码中的实际空格,以提高可读性,并将匹配项中包含任何换页符、制表符等。
字符串的第一个字符也必须大写,因此我们将使用输入开始说明符并捕获它之后的任何字符
/^(.)
我们的查找表达式然后组合成
/^(.)|\s(.)/g
现在,在替换文本中使用 $n 属性有一些我不打算详细说明的限制; 在这种特殊情况下,使用函数的美妙之处在于三个事实
- $1 正则表达式属性可以用作函数参数;
- $1 正则表达式属性可以在函数内部使用,并且
- $1 正则表达式属性在函数执行后由
replace
方法在内部更新!
因此,$1 属性始终表示下一个子匹配项。 剩下要做的就是将整个字符串转换为小写,并将每个匹配项使用我们的 replace
函数转换为大写
// proper case function (JScript 5.5+)
function toProperCase(s)
{
return s.toLowerCase().replace(/^(.)|\s(.)/g,
function($1) { return $1.toUpperCase(); });
}
或者,如果您愿意,可以使用原型样式
// proper case string prptotype (JScript 5.5+)
String.prototype.toProperCase = function()
{
return this.toLowerCase().replace(/^(.)|\s(.)/g,
function($1) { return $1.toUpperCase(); });
}
请记住,这不是同义词典,其主要用途是专有名词,即将 HECTOR J. RIVAS 或 hector j. rivas 转换为 Hector J. Rivas... 您需要一个二次传递函数来跳过短语中的文章或其他单词,例如将本段中的开头句子变成:Bear in Mind that this is no Thesaurus.
我当然想知道 replace
函数、正则表达式对象和函数作为替换文本的内部原理,因为我主要在数据库应用程序中使用它,但到目前为止,它报告的速度和效率比我尝试过的任何其他方法都好。
希望你喜欢。