正则表达式的问题??

yyf_321 2003-08-31 11:30:54
var ss = "Is is the cost of of gasoline going up up?.\n";
var re = /\b([a-z]+) \1\b/gim;
var rv = ss.replace(re,"$1"); //为什么会一个单词替代两个单词???
返回的是 Is the cost of gasoline going up?

$1 的值是怎么取的?
这是怎么匹配的,总是看不懂!!

如果ss 改为:"Is is is the cost of of of gasoline going up up up?.\n"
返回的怎么是 Is is the cost of of gasoline going up up?
如果要返回 Is the cost of gasoline going up? 
re 该怎么写

还有就是re 中的 \1 改为 \2 什么就不行啦
...全文
35 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
pazll 2003-08-31
  • 打赏
  • 举报
回复
又是你啊;哎,我们可真有缘的;
在asp版里本来给你写了好长的解释的;都是我学正则表达式的理解。
后来脚本超时,都泡汤了;
再写一遍吧:re=/\b([a-z]+) \1\b/gim
前后都加了一个\b意思就是说从一个单词的开头到另一个单词的开头
([a+z]+)实际上就是匹配一个单词了。+的意思就是在其前面的字符或表达式至少匹配一次;
然后紧接着后面是一个空格 再加\1 意思就是前面的单词空格之后再接着出现一遍前面的单词
\1的意思就是前面的那个单词,为什么要用\1呢,是引用前面括号()里面的表达式的匹配;
如果前面还有一个()是跟在后面的那如果要引用后面括号里面的匹配就要用\2了。。这是后向引用;可以去看说明;
如果要把三个重复的单词替换为一个,那么我相信聪明的你,现在一定可以自己写了;
就是:再在后面加一个空格再家\1就是再出现一遍了;;
好了。你应该懂了吧!!

87,988

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧