繁体   English   中英

标题案例用Java语句-这段代码如何工作?

[英]Title Case a Sentence in Javascript--How does this code work?

我找到了以下为标题加上大小写的句子的解决方案,但不确定其工作原理。 有人可以向我解释双星号之间的部分在做什么吗? 我知道g将替换扩展到\\ b的所有实例 ,但\\ b到底是什么 在这里指出? 嵌入式功能如何工作? 在此先感谢您的解释!

function titleCase(string){
return string.toLowerCase().replace( **/\b./g, function(a){ 
    return a.toUpperCase()**; 

} );
}
titleCase('this IS THE wOrst string eVeR');
//returns "This Is The Worst String Ever"

\\ b匹配单词字符不跟随或不跟随另一个单词字符的位置。 特殊字符(例如点(。))与单个字符匹配。 所以:

/\b./

在'this'中匹配t,在'is'中匹配i,依此类推。

然后,函数会创建一个子字符串,并带有从执行的正则表达式接收的参数。

由于您使用了全局匹配标志,因此示例中的字符串将对正则表达式执行六次。

因此,您所看到的就是字符串的“替换方法”。 将使用小写的字符串(在titleCase函数内部),进行迭代并替换在replace方法的参数中定义的任何内容。 替换方法中的参数

string.replace(a,b);

其中“ a”是您要替换的内容,“ b”是您要替换“ a”的内容。

现在,在此特定实例中,您的replace方法将正则表达式用作其第一个参数,然后无论正则表达式标识什么,都将被指示用该函数替换! 因此,replace方法可以将字符串,正则表达式和函数作为参数。

现在,此正则表达式或RegEx / regex在说“在单词边界(\\ b)的开头找到我任何字符(。)”。 用RegEx术语来说,边界可以是例如单词开头或结尾的任何标识符。 (亚历山大的第一个答案证明了这一点)。 /\\b./g的“ g”是一个“全局”标志,这意味着将选择(替换)以边界开头的第一个字符,但我想选择整个字符串中的每个单个第一个字符,而不仅仅是一审。 因此,例如,使用您提供的字符串,如果我们不去掉正则表达式中的“全局标志”,则titleCase函数将只替换字符串中的“ this”并将其大写。 由于正则表达式具有明确的规则,因此我们必须非常明确。

现在,您在replace方法中的第二个参数(替换)将成为对我们最初使用第一个参数选择的字符运行某种类型的指令的函数(本例中的正则表达式)案件)。 您的替换函数很容易解释,并使用参数“ a”,该参数仅获取titleCase字符串中每个单词的首字母,并大写该字符。

因此,就我们可以使用JavaScript进行更改的复杂程度而言,“替换方法”通常非常重要,尤其是因为它无需运行“ for”或“ while”循环即可为我们进行迭代。 当您开始使用更丰富的JavaScript应用程序时,您将开始理解这一点的重要性。 希望这有助于您对如何理解此代码有不同的看法。

仅投入2美分,我更喜欢使用“拆分”方法编写此特定函数。 再长一点,但这是我的代码:

 function titleCase(str) {
  var splitLowerStr = str.toLowerCase().split(" ");
  var newArr = splitLowerStr.map(function(x) {
    return x.replace(/^\w/g, function(a) {
      return a.toUpperCase();
    });
  }).join(" ");

  return newArr;
}

titleCase("You gotta PAY tHe TROLL ToLL, to get in tHE BoY's HOLE");

我选择这样写是为了使我的代码具有声明性和功能性,但是有很多不同的方法来完成标题中的句子。 我的正则表达式有些不同,但是在识别“单词”字符方面,而不是在任何字符上,都更加具体。 您可以在大多数在线正则表达式教程中找到有关此内容的更多信息。 我真的很喜欢http://ryanstutorials.net/regular-expressions-tutorial/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM