【问题标题】:Javascript replacing characters using replace() [duplicate]Javascript使用replace()替换字符[重复]
【发布时间】:2015-10-11 10:25:36
【问题描述】:

我有这段代码

    <html>
   <head>
      <title>JavaScript String replace() Method</title>
   </head>
   <body>
      <script type="text/javascript">
         var re = /(\w+)\s(\w+)/;
         var str = "zara ali";
         var newstr = str.replace(re, "$2, $1");

         document.write(newstr);
      </script>
   </body>
</html>

谁能解释一下这是什么以及如何阅读?

var re = /(\w+)\s(\w+)/;

同样在 str.replace(re, "$2,$1); 中,2 美元和 1 美元是什么?

【问题讨论】:

标签: javascript regex replace


【解决方案1】:
 var newstr = str.replace(re, "$2, $1");

用第一个单词替换第二个单词,并在两者之间放置一个,。 https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx 是一个正则表达式“备忘单”的链接。正则表达式有点令人困惑,但一旦你让它正常工作,它就会非常棒。

【讨论】:

    【解决方案2】:

    查看http://regexr.com/3beap。该站点在处理正则表达式时非常有用。如果您将鼠标悬停在表达式的不同部分(在蓝色条下方),它会告诉您每个部分的作用。如果您有多个替换部分(底部灰色条),它会告诉您每个部分的作用。

    您还可以通过 Google 搜索找到许多涵盖基础知识的正则表达式教程。

    但是用简单的英语来说,您的代码的作用是:

    • \w+ 匹配一个或多个字母
    • \s 匹配单个空格
    • () 捕获匹配以供稍后参考,并将它们保存在 $# 中,其中 # 是一个数字 1-9 从 1 开始,并按照捕获的顺序为每个捕获的组递增
    • 所以$1 是第一个(),$2 是第二个()。

    • 在您的示例中,$1 是 zara,$2 是 ali

    • 在替换中,您所做的只是匹配该正则表达式,将输出捕获到$1 和$2,然后将其替换为“$2, $1”,变成“ali, zara”。

    我希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      请参阅我在上面发布的评论中的链接以了解正则表达式。 但是要向您解释您发布的代码实际上做了什么......

      var re = /(\w+)\s(\w+)/; 是一个正则表达式。前导和尾随 / 是分隔符,除了告诉解释器实际表达式是什么之外,实际上与替换没有任何关系:(\w+)\s(\w+)

      • () 被称为捕获括号,并被浏览器记住,以便以后在替换中使用它们。第一组分配给 $1,第二组分配给 $2,依此类推...

      • \w 匹配任何字母数字字符,包括下划线。相当于 [A-Za-z0-9_]

      • + 表示应用前面的表达式一次或多次

      • \s 匹配单个空白字符

      所以你的表达式说查看字符串"zara ali" 中的一个或多个字母数字字符(并将它们作为一组记住,将它们存储在$1 中),然后是一个空格字符,然后是另一组一个或多个字母数字字符字符(并将它们作为一个组记住,将它们存储在$2 中)。如果匹配,则将字符串替换为字符串"$2, $1",这实际上是第二个捕获组,后跟逗号和空格,以第一个捕获组结束。

      所以您以:"zara ali" 开头并以 "ali, zara" 结尾

      【讨论】:

        【解决方案4】:

        该脚本旨在使用正则表达式将"FirstName LastName" 形式的字符串转换为"LastName, FirstName"。线

        var re = /(\w+)\s(\w+)/; 
        

        创建正则表达式,下面是其工作原理的细分,# 表示注释:

        /     # open regular expression
          (     # open a capturing group, aliased as $1
            \w    # match any alphanumeric character or underscore
            +     # match a single or multiple occurrences of the preceding token
          )     # close capturing group $1
          \s    # match a single space
          (     # open capturing group $2
            \w+   # match any single or multiple alphanumeric character or underscore
           )    # close capturing group $2
        /     # close expression
        

        线

        var newstr = str.replace(re, "$2, $1");
        

        将正则表达式应用于str,提取捕获组,反转它们,并在其间添加一个逗号。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-08
          • 1970-01-01
          • 1970-01-01
          • 2016-04-19
          • 1970-01-01
          • 1970-01-01
          • 2011-03-13
          • 2012-07-23
          相关资源
          最近更新 更多