标题为Javascript中的句子 - 这段代码如何运作?

时间:2016-02-24 15:26:42

标签: javascript regex

我找到了以下解决标题 - 封装句子的方法,但我不确定它是如何工作的。任何人都可以向我解释双星号之间的部分是什么吗?我了解 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"

2 个答案:

答案 0 :(得分:2)

\ b匹配未跟随单词字符或其他单词字符前面的位置。像点(。)这样的特殊字符与单个字符匹配。 所以:

/\b./

匹配'此',我在'是'等等。

一个函数创建一个带有从执行的正则表达式接收的param的子字符串。

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

答案 1 :(得分:1)

所以,你正在寻找的是"替换方法"一个字符串。它将采用较低的套接字符串(在titleCase函数内),遍历它&替换在replace方法的参数中定义的任何内容。 replace方法中的参数

string.replace(a,b);

其中" a"是您正在寻找的替代品," b"是你想要取代的" a"用。

现在,在这个特定的实例中,你的替换方法是使用正则表达式作为它的第一个参数,然后正则表达式识别的任何东西,它被指示被函数替换!因此,替换方法可以采用字符串,正则表达式和作为参数。

现在,这个正则表达式或RegEx / regex正在说"在单词边界(\ b)的开头找到任何字符(。)。"例如,在RegEx术语中,边界可以是单词的开头或结尾处的任何标识符[s]。 (亚历山大的第一个答案证明了这一点)。 " g" /\b./g中的{"全球" flag,意味着将选择(替换)开始边界的第一个字符,但我想在整个字符串中选择每个第一个字符,而不仅仅是第一个字符。因此,例如,使用您提供的字符串,如果我们要放弃"全球标志"从您的正则表达式,您的titleCase函数将只替换&资本化"这"在你的字符串中。我们必须非常具体地使用正则表达式,因为它们有明确的规则。

现在,你在替换方法(替换)中的第二个参数将是一个函数,用于在我们最初用第一个参数选择的字符[s]上运行某种类型的指令[s] (在这种情况下为正则表达式)。你的替换函数是不言自明的,并使用参数" a",它只取你titleCase字符串中每个单词的第一个字母,并将该字符大写。

所以,"替换方法"总的来说,在我们使用JavaScript改变事物的复杂程度方面非常重要,特别是因为它为我们迭代而不需要运行" for"或"而"环。当您开始使用更丰富的JavaScript应用程序时,您将开始理解这一点的重要性。希望这有助于您了解如何理解此代码。

只要投入2美分,我更喜欢使用" split"来编写这个特殊功能。方法。它还要长一点,但这是我的代码:

 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");

我选择像这样写它来使我的代码声明和&功能性,但有很多不同的方法来完成标题的句子。我的正则表达式有点不同,但在识别" word"方面也更具体。字符,而不是任何字符。您可以在大多数在线正则表达式教程中找到更多相关信息。我很喜欢 http://ryanstutorials.net/regular-expressions-tutorial/