使用replace()替换字符的Javascript

时间:2015-07-21 19:30:44

标签: javascript regex replace

我有这段代码

    <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&amp; $ 1吗?

4 个答案:

答案 0 :(得分:0)

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

将第二个单词替换为第一个单词,并在其间放置,https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx是指向正则表达式&#34;备忘单的链接。&#34;正则表达式有点令人困惑,但一旦你使它正常工作它就会非常棒。

答案 1 :(得分:0)

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

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

但是用简单的英语写下你的代码所做的是:

  • \w+匹配一个或多个字母
  • \s匹配单个空格
  • ()会抓取该匹配项以供日后参考并将其保存在$#中,其中#是一个以{1}开头的数字1-9,并按捕获的顺序逐个增加
  • 因此$1是第一个()$2是第二个()

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

  • 在替换中你正在做的就是匹配正则表达式,将输出捕获到$1$2,然后将其替换为“$ 2,$ 1”,这将成为“ali,zara”。

我希望这会有所帮助。

答案 2 :(得分:0)

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

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"

结束

答案 3 :(得分:0)

该脚本旨在使用正则表达式将"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,提取捕获组,反转它们,并在其间添加逗号。