首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 求助 一个JS 字符串替换正则表达式 的分析? [已结贴,结贴人:iamluda]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 08:40:07 楼主
    有如下的一个字符串替换的正则表达式
    s.replace(/&/g,"&amp;").replace(/ </g,"&lt;").replace(/>/g,"&gt;").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");

    这个字符串替换表达式中嵌套了3个replace,整个字符串替换的含义是什么?如何分析这个字符串替换的正则表达式?
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 09:15:011楼 得分:20
    s.replace(/&/g,"&amp;")//替换字符串s中的&为&amp;
    replace(/  </g,"&lt;")//替换字符串中的 <为&lt;
    replace(/>/g,"&gt;")//替换字符串中的>为&gt;
    replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");  匹配 \ . * [ ] ( ) $ ^ 字符,$1是对匹配的字符的引用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 09:26:512楼 得分:20
    s.replace(/&/g,"&amp;")//替换字符串s中的&为&amp;
    replace(/  </g,"&lt;")//替换字符串中的 <为&lt;
    replace(/>/g,"&gt;")//替换字符串中的>为&gt;
    replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");  匹配 \ . * [ ] ( ) $ ^ 字符,$1是对匹配的字符的引用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 09:53:453楼 得分:20
    引用 1 楼 junp2007 的回复:
    s.replace(/&/g,"&amp;")//替换字符串s中的&为&amp;
    replace(/  </g,"&lt;")//替换字符串中的 <为&lt;
    replace(/>/g,"&gt;")//替换字符串中的>为&gt;
    replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");  匹配 \ . * [ ] ( ) $ ^ 字符,$1是对匹配的字符的引用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • r_swordsman
    • 等级:
    发表于:2008-05-10 11:37:204楼 得分:20
    引用楼主 iamluda 的帖子:
    有如下的一个字符串替换的正则表达式
    s.replace(/&/g,"&amp;").replace(/  </g,"&lt;").replace(/>/g,"&gt;").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1"); 

    这个字符串替换表达式中嵌套了3个replace,整个字符串替换的含义是什么?如何分析这个字符串替换的正则表达式?


    replace(/&/g,"&amp;") // 将 & 替换为 &amp;
    replace(/ </g,"&lt;") // 将 < 替换为 &lt;
    replace(/>/g,"&gt;") // 将 > 替换为 &gt;
    replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1") // 将 \ . * [ ] ( ) $ ^ 这些字符转义,即前面加上 \
    即 \ 变成 \\
    即 . 变成 \.
    即 * 变成 \*
    即 [ 变成 \[
    即 ] 变成 \]
    即 ( 变成 \(
    即 ) 变成 \)
    即 $ 变成 \$
    即 ^ 变成 \^

    即一个字符会被替换为 2 个字符
    由于 JS 字符 \ 会被转义为 \\

    所以你在字符串中的 \ 将是 \\
    所以你在字符串中的 \\ 将是 \\\\
    所以你在字符串中的 \. 将是 \\.
    所以你在字符串中的 \* 将是 \\*


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 11:53:125楼 得分:20
    s.replace(/&/g,"&amp;").replace(/  </g,"&lt;").replace(/>/g,"&gt;").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1"); 
    这个如果替换的顺序
    replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");  匹配 \ . * [ ] ( ) $ ^ 字符,$1是对匹配的字符的引用
    replace(/>/g,"&gt;") // 将 > 替换为 &gt;
    replace(/ </g,"&lt;") // 将  < 替换为 &lt;
    replace(/&/g,"&amp;") // 将 & 替换为 &amp;

    以上就是替换顺序与解析
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 17:00:006楼 得分:0
    一楼正解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 16:54:397楼 得分:0
    下面这个 字符串替换的正则表达式 
    return s.replace(/\\([\\\.\*\[\]\(\)\$\^])/g,"$1").replace(/&gt;/g,">").replace(/&lt;/g," <").replace(/&amp;/g,"&");

    是否和
    s.replace(/&/g,"&amp;").replace(/  </g,"&lt;").replace(/>/g,"&gt;").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1"); 

    的过程是相反的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 17:21:008楼 得分:0
    不一定相反啊,只是替换顺序不同而已
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 17:49:249楼 得分:0
    如果一个字符串经过
    s.replace(/&/g,"&amp;").replace(/  </g,"&lt;").replace(/>/g,"&gt;").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");替换

    然后在经过
    s.replace(/\\([\\\.\*\[\]\(\)\$\^])/g,"$1").replace(/&gt;/g,">").replace(/&lt;/g," <").replace(/&amp;/g,"&");

    能还原吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 22:32:5310楼 得分:0
    咋都不喜欢动手
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 08:23:1511楼 得分:0
    hehe
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-15 08:52:3712楼 得分:0
    引用 9 楼 iamluda 的回复:
    如果一个字符串经过
    s.replace(/&/g,"&amp;").replace(/    </g,"&lt;").replace(/>/g,"&gt;").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");替换

    然后在经过
    s.replace(/\\([\\\.\*\[\]\(\)\$\^])/g,"$1").replace(/&gt;/g,">").replace(/&lt;/g,"  <").replace(/&amp;/g,"&"); 

    能还原吗?

    当然可以

    你把替换的符号反过来就是了
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved