这些正则表达式元字符之间有什么区别?

时间:2012-01-23 13:30:31

标签: javascript regex

此代码

var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1")

和此代码

var re = /(.+)\s(.+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1")

做同样的事情。

.(点)和\w元字符之间是否存在任何关键差异?

5 个答案:

答案 0 :(得分:6)

一个点匹配除换行符之外的每个字符,
\w匹配所有字母数字字符和下划线(在JavaScript中)。

所以,. = [^\n\r]\w = [a-zA-Z0-9_]

如果你想要一个与每个角色相匹配的文字,请使用:

  • [\S\s](所有非空格(\S)和空格(\s)字符=所有字符)
  • [\D\d](所有非数字(\D)和所有数字(\d)字符=所有字符)
  • [\W\w](所有非单词字符和所有单词字符=所有字符)

有关详细信息,请参阅MDN: Regular expressions

答案 1 :(得分:2)

.匹配任何非换行符。

\w匹配字符,即相当于[A-Za-z0-9_]

使用\w似乎是正确的方法,但在处理名称时可能会有点错误,如下所示:

var str = "Hans-Kristian Whistler";

var re = /(\w+)\s(\w+)/;
var newstr = str.replace(re, "$2, $1");
// result: Hans-Whistler, Kristian

var re = /(.+)\s(.+)/;
var newstr = str.replace(re, "$2, $1");
// result: Whistler, Hans-Kristian

另见:

答案 2 :(得分:1)

\w匹配字母数字字符和_但没有空格

var re = /(\w+)\s(\w+)/;
var str = "John Herbert Smith";
var newstr = str.replace(re, ">$2<, >$1<");

输出:

>Herbert<, >John< Smith

.匹配除了换行符之外的所有内容

var re = /(.+)\s(.+)/;
var str = "John Herbert Smith";
var newstr = str.replace(re, ">$2<, >$1<");

输出

>Smith<, >John Herbert<

答案 3 :(得分:0)

在这里,您可以阅读dot\w

答案 4 :(得分:0)

查看the docs

关于\w

  

匹配包括下划线在内的任何字母数字字符。相当于[A-Za-z0-9 _]。

关于.

  

匹配除换行符之外的任何单个字符。