写完正则在浏览器上检测自己写得对不对实在是不方便,于是就撸了一个JS正则小demo出来。

demo

demo展示

项目地址

代码部分

首先把布局样式先写好。

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>js正则查找替换工具</title>
     <link rel="stylesheet" type="text/css" href="./RegExp.css">
     <script type="text/JavaScript" src="./RegExp.js"></script>
 </head>
 <body>
     <form name="tester" action="" method="post" onSubmit="processRegex(this);return false">
         <table border="1" cellpadding="4" cellspacing="0" width="550">
             <tr>
                 <th class="Dialog">js正则查找替换工具</th>
             </tr>
             <tr>
                 <td class="Dialog">
                     <span class="header">请输入正则表达式:</span>
                     <br>
                     <input name="RegEx" type="text" size="62" style="font-size:13px">
                     <input type="checkbox" name="caseSensitive" id="caseSensitive" value="Yes">
                     <label for="caseSensitive">区分大小写</label>
                     <input type="radio" name="operation" id="operationFind" value="find" checked onClick="hideReplaceFields()">
                     <label for="OperationFind">查找</label>
                     <input type="radio" name="operation" id="operationReplace" value="replace" onClick="showReplaceFields()">
                     <label for="OperationReplace">替换</label>
                     <br>
                     <span class="header" id="replaceheader">请输入替换的正则表达式:</span>
                     <br>
                     <input id="RegExReplace" name="RegExReplace" type="text" size="62" style="font-size:13px">
                     <span class="header" style="margin-top: 3px;display: block;">填写你想查找或替换的文本:</span>
                     <textarea name="searchText"  cols="70" rows="6"></textarea>
                     <img src="http://files.cnblogs.com/files/MuYunyun/pkq.gif" style="margin-left: 10px">
                     <br>
                     <input name="submit" type="submit" style="font-weight: bold" value="开始">
                 </td>
             </tr>
         </table>
     </form><br>
     <span id="output"></span>
     <script language="JavaScript">
         hideReplaceFields();
     </script>
 </body>
 </html>

布局

 body {
     font-family: arial;
     font-size: 12px;
 }

 input {
     font-size: 11px;
 }

 textarea {
     font-size: 11px;
 }

 th {
     background:#8888FF;color:white;text-align:left
 }

 td {
     background:#CCCC99;color:black;font-size:12px
 }

 .RowA {
     background: #CCCC99
 }

 .RowB {
     background: #EEEEBB
 }

 .header {font-weight: bold}

样式

接着就是用js分别构造查找和替换两个函数,用到了RegExp对象的一些属性,思路还是比较简单的。代码如下:

 // 没选中替换则不能输入
 function hideReplaceFields() {
     document.getElementById('RegExReplace').disabled = true;
     document.getElementById('replaceheader').disabled = true;
 }

 // 点击替换则能输入
 function showReplaceFields() {
     document.getElementById('RegExReplace').disabled = false;
     document.getElementById('replaceheader').disabled = false;
 }

 // 查找
 function processRegexFind(text, regex, flags) {
     var reg = new RegExp(regex, flags);
     var lastIdx = -1;
     var iCount = 0;
     var result = "";
     var output = '<div style="height:200px;overflow-y:auto;width:550"><table border="0" cellpadding="2" cellspacing="0" width="550"><tr><th width="*">匹配内容</th><th>位置</th><th>长度</th></tr>'

     // 循环
     while (lastIdx != 0) {
         var mtch = reg.exec(text);
         if (reg.lastIndex !== 0) { //lastIndex属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。
             iCount++;
             if (iCount % 2) {
                 style = "RowA"
             } else style = "RowB";
             // 输出
             output += '<tr class="' + style + '"><td>' + RegExp.lastMatch + '</td><td>' + (reg.lastIndex - RegExp.lastMatch.length) + '</td><td>' + RegExp.lastMatch.length + '</td></tr>';
         }
         lastIdx = reg.lastIndex;
     }
     output += '</table></div>';

     if (iCount !== 0) {
         result = "匹配个数: " + iCount + output;
     } else result = '未找到匹配的项';
     return result;
 }

 // 替换
 function processRegexReplace(text, regexfind, regexreplace, flags) {
     var re = new RegExp(regexfind, flags);
     var newstr = text.replace(re, regexreplace);
     var result = '<div style="height:200px;overflow-y:auto;width:550"><table border="0" cellpadding="2" cellspacing="0" width="550"><tr><th>替换后:</th></tr><tr><td>' + newstr + '</td></tr>';
     return result;
 }

 // 人口
 function processRegex(form) {
     var output = '';
     var flags;
     if (form.caseSensitive.checked) flags = "g";
     else flags = "gi";
     //判断是查找还是替换
     if (form.operationFind.checked) {
         output = processRegexFind(form.searchText.value, form.RegEx.value, flags);
     } else if (form.operationReplace.checked) {
         output = processRegexReplace(form.searchText.value, form.RegEx.value, form.RegExReplace.value, flags);
     }

     document.getElementById('output').innerHTML = output;
     return false;
 }

用这小工具学习js正则可以事半功倍哟。大家新年快乐!

撸一个JS正则小工具的更多相关文章

  1. 调用百度API写了一个js翻译小工具

    目前还未完成的功能有:textarea高度自适应,移动端与pc端都写了.效果如图: html: <!DOCTYPE html> <html lang="en"&g ...

  2. 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名

    生活中有很多场景都需要我们签字(签名),如果是一些不重要的场景,我们的签名好坏基本无所谓了,但如果是一些比较重要的场景,如果我们的签名比较差的话,就有可能给别人留下不太好的印象了,俗话说字如其人嘛,本 ...

  3. 利用 Python 写一个颜值测试小工具

    我们知道现在有一些利用照片来测试颜值的网站或软件,其实使用 Python 就可以实现这一功能,本文我们使用 Python 来写一个颜值测试小工具. 很多人学习python,不知道从何学起.很多人学习p ...

  4. 【翻译】要理解Ext JS 5小工具

    原版的:Understanding Widgets in Ext JS 5 在Ext JS 5,引入了新的"widgetcolumn",支持在网格的单元格中放置组件. 同一时候,还 ...

  5. 两周撸一个掘金微信小程序

    利益相关 无 声明 这并不是掘金官方小程序(貌似没有搜到掘金 APP 对应的官方小程序),完全为第三者开发者开发,仅用于学习交流,禁止用于其他用途.若要使用官方正版,可访问掘金 官方网站,或下载掘金官 ...

  6. 使用PyQt4制作一个正则表达式测试小工具

    最近在做一些网络爬虫的时候,会经常用到正则表达式.为了写出正确的正则表达式,我经常在这个网站上进行测试:Regex Tester.这个页面上面一个输入框输入正则表达式,下面一个输入框输入测试数据,上面 ...

  7. Python学习之旅:用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...

  8. 快速入门PaddleOCR,并试用其开发一个搜题小工具

    介绍 PaddleOCR 是一个基于百度飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别.竖排文本识别.长文本识别.同时支持多种文本检测.文本识别的训练算法. ...

  9. 2014第8周一JS正则小问题

    今天解决一个关于JS正则表达式的小问题,需求是匹配6位或9位数字,我原来的写法是这样的/^(/d){6}|(/d){9}$/.test(val),但测试发现输入1234567时也返回成功,很郁闷搜索了 ...

随机推荐

  1. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案

    用gulp启动,错误如下 Error: watch ENOSPC at exports._errnoException (util.js:746:11) at FSWatcher.start (fs. ...

  2. php练习5——简单的学生管理系统(隐藏控件的使用)

    要求:    程序:gradeManage.html和gradeManage.php          结果       注意:   1.使用隐藏控件时,得在不同表单下,不能在同一个表单下:   2. ...

  3. HDU 1166 敌兵布阵 线段树的基本应用——动态区间和问题

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=1166 简单题,1A了,这个好像就是传说中的“点树”. 设当前结点表示线段[left, right],编号 ...

  4. 开发C# .net时使用的数据库操作类SqlHelp.cs

    练习开发WPF程序的时候,是这样写的,虽然很简单,相必很多新手会用到,所以拿来共享一下, using System; using System.Collections.Generic; using S ...

  5. 支付宝Demo 报错

    支付宝SDK-------DEMO第一次编译肯定是会报错的: 修正的方法为:   打开项目属性->Build Settings 找到 Library SearchPaths   看见里面的参数了 ...

  6. 30年的Hello world

    30 年的 Hello world 转载自:http://www.admin10000.com/document/2398.html 最近我在7月4日这一天所在的那周休假了.休假期间,我利用大把的时间 ...

  7. 解决cocos2d-X 2.0版本后创建的Android项目提示org.cocos2dx.lib.Cocos2dxActivity找不到问题

    原地址: http://blog.163.com/zhoulong19880518@126/blog/static/6070970220132511558143/ 解决方法:    复制 ***\co ...

  8. 关于 OneAPM Cloud Test DNS 监控的几个重要问题

    你注意到了吗?OneAPM Cloud Test 已经全面开启支持 DNS 监控了! CT 产品自上线以来一直致力于产品完善,希望能够尽可能全面地满足用户需求,为您提供完美的用户体验.目前 Cloud ...

  9. 李洪强iOS开发Swift篇—10_方法

    李洪强iOS开发Swift篇—10_方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开 ...

  10. USB OTG

    OTG检测的原理是:USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时设备 ...