日期:2014-05-16  浏览次数:20392 次

请高人给小弟讲述下这句话的意思```[正则表达式]
function   ReplaceDemo(){
      var   r,   re;                                             //   声明变量。
      var   ss   =   "The   rain   in   Spain   falls   mainly   in   the   plain. ";
      re   =   /(\S+)(\s+)(\S+)/g;                 //   创建正则表达式模式。
      r   =   ss.replace(re,   "$3$2$1 ");       //   交换每一对单词。
      return(r);                                             //   返回结果字符串。
}
结果:
rain   The   Spain   in   mainly   falls   the   in   plain.   :  

为什么会这样,那位说下(\S)(\s)与$3$2$1   的意思。
我个人是这样理解的大家看我有没有错误啊(刚看的书):
\S   是所有的空格TAB等等不可见字符
\s   是所有字符
$1就是指的第一个括号匹配的值

就是不懂(\S+)(\s+)(\S+)   连起来是什么意思

------解决方案--------------------
\s 任何空白符,等价于[ \t\n\r\f\v]
\S 任何非空白符,等价于[^ \t\n\r\f\v]

括号 () 有两个用途
1 用于把单独的项目分组成子表达式
这种括号通常后接复制字符,复制字符这时只对()内的字符进行复制处理
例如:
/java(script)?/ 匹配的是字符串 "java ",其后既可以有 "script ",也可以没有
/(ab|cd)+|ef/ 匹配的既可以是字符串 "ef ",也可以是字符串 "ab " 或者 "cd " 的一次或多次重复

2 在完整的模式(正则表达式)中定义子模式
对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中
所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储
存储子匹配的缓冲区编号从 1 开始,连续编号直至最大 99 个子表达式。
每个缓冲区都可以使用 '\n '或 '$n '访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数
注意, '\n '或 '$n '引用的并不是那个子表达式的模式,而是与那个模式相匹配的文本

------解决方案--------------------
括号是分组的意思,每一个组最后用一个$加数字表示
比如
(\S+)(\s+)(\S+)
第一个匹配就相当于是The rain
$3 是rain
$2 是空格
$1 是The
最后就是相当于反向