【问题标题】:In JavaScript, what does the notation /\s*;\s*/ mean?在 JavaScript 中,符号 /\s*;\s*/ 是什么意思?
【发布时间】:2015-12-13 19:39:17
【问题描述】:

在下面的例子中,/\s*;\s*/ 是什么意思?在string.split() 命令中用作分隔符。

var names = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ';

console.log(names);

var re = /\s*;\s*/;

var nameList = names.split(re);

console.log(nameList);

【问题讨论】:

  • 这是一个regular expression
  • \s 表示空格 * 表示 0 次或多次,因此这将在任何 ; 之前或之后拆分任意数量的空格
  • 是的,它是split() 中的分隔符。它将在匹配后拆分字符串并从中创建和排列。

标签: javascript regex split separator


【解决方案1】:

/\s*;\s*/ 是正则表达式,常用于模式匹配。您的正则表达式 (\s*;\s*) 转换为:

  • \s 匹配任何空白字符 [\r\n\t\f]

  • * 表示在零次和无限次之间应用上一次匹配,尽可能多次,按需回馈[贪婪]

  • ;; 字符字面匹配

  • \s 匹配任何空白字符 [\r\n\t\f](与项目符号 #1 相同)

  • * 表示在零次和无限次之间应用上一次匹配,尽可能多次,根据需要回馈 [greedy](与第 2 条相同)

这里使用正则表达式而不是.split 的简单字符串参数的原因是,原始字符串在元素之间具有不同的分隔符——不同的空格和分号。没有一个简单的字符串可以传递来找到它们——您可以只使用;,但这会在数组的某些元素的开头和/或结尾留下空格。正则表达式可确保我们匹配所有变体。

【讨论】:

    【解决方案2】:

    使用 JavaScript 的 .split(separator) 方法,您可以从字符串创建一个数组。 separator 是一个简单的字符串或更复杂的正则表达式。

    在您的示例中,提供的正则表达式是/\s*;\s*/。正反斜杠只是表示它是正则表达式的分隔符。 \s*;\s* 是您的模式,意思是:任意数量的空白字符(空格、制表符),后跟分号,后跟任意数量的空白字符。这是"my string".split(";") 的一个更漂亮的版本,因为它会修剪分号前后的空白。

    例子:

    var test1 = "dog;cat;fish".split(";");
    // test1 is ["dog", "cat", "fish"]
    
    var test2 = "dog;cat;fish".split(/\s*;\s*/);
    // test2 is ["dog", "cat", "fish"]
    

    只要分号周围没有白色字符,这两个返回完全相同的结果。但是:

    var test3 = "dog ; cat; fish".split(";");
    // test3 is ["dog ", " cat", " fish"]
    
    var test4 = "dog ; cat; fish".split(/\s*;\s*/);
    // test4 is ["dog", "cat", "fish"]
    

    这一次,test4 的结果要复杂得多,因为没有空格。

    【讨论】:

      【解决方案3】:

      regular expressions \s 中元字符代表空白字符。

      空白字符可以是:

      空格字符
      制表符
      回车符
      换行符
      垂直制表符
      换页符

      * 代表所有。
      ; 代表冒号。

      这里的表达式\s*;\s* 表示; 后面或前面的任何空格都将使用JavaScript 的spilit() 方法将split 放入一个数组中。

      【讨论】:

        【解决方案4】:

        粗略地说,它通过; 将输入字符串拆分为; 周围的任意数量的空格。


        var input = "One ;    Two   ;Three   ";
        input.split(";")        // returns ["One ", "    Two   ", "Three   "]
        input.split(/\s*;\s*/)  // returns ["One", "Two", "Three"]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-10
          • 1970-01-01
          • 2011-09-27
          • 2021-05-27
          • 2019-05-27
          • 2021-11-02
          • 1970-01-01
          • 2018-05-02
          相关资源
          最近更新 更多