几个问题,想帮我解答一下,可以的话看看代码有没有可以更完善的地方
来源:4-7 完善测试工具
Bravura
2019-12-11 19:43:43
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>正则表达式测试工具</title> <style> dl, dd { padding: 0; margin: 0; } .wrap { width: 1000px; margin: 100px auto; } #regexp { float: left; width: 650px; } .title { color: #777; font-size: 24px; text-align: center; } #regexp .textbox { width: 638px; height: 150px; border: 1px solid #ccc; border-radius: 5px; padding: 5px; resize: none; } #regexp .readonly { background-color: #eee; } #regexp .textfidel { width: 215px; padding: 5xp; border: 1 solid #ccc; } #reglist { float: right; width: 320px; border: 1px solid #ccc; border-radius: 5px; background-color: #f5f5f5; padding: 20px 0; } #reglist dt { margin-bottom: 10px; text-indent: 20px; color: #999; font-size: 18px; font-weight: bold; } #reglist dd { height: 40px; line-height: 40px; text-indent: 20px; } #reglist a { display: block; color: #08c; text-decoration: none; } #reglist a:hover { color: #005580; background-color: #eee; } </style> </head> <body> <div class="wrap" id="wrap"> <h1 class="title">正则表达式测试工具</h1> <div id="regexp"> <h1 class="title">正则表达式测试工具</h1> <textarea id="usertext" class="textbox" placeholder="在此处输入比配的文本"></textarea> <p> 正则表达式:<input type="text" id="userRegExp" class="textfield" type="text" placeholder="在此处输入正则表达式" /> <input type="checkbox" class="userModifier" value="i" />忽略大小写 <input type="checkbox" class="userModifier" value="g" />全局匹配 <input type="checkbox" class="userModifier" value="m" />多行匹配 <input type="button" value="测试匹配" id="matchingBtn"> </p> 匹配结果:<div id="matchingResult" class="textbox readonly"> </div> <p> 替换文本:<input type="text" id="userReplace" class="textReplace" type="text" /> <input type="button" value="点击替换" id="replaceBtn"> </p> 匹配结果: <div id="replaceResult" class="textbox readonly"></div> </div> <dl id="reglist"> <dt>常用正则表达式</dt> <dd><a href="javascript:;" class="regexplist" title=" [\u4e00-\u9fa5]*">匹配中文字符</a></dd> <dd><a href="javascript:;" class="regexplist" title="[1-9]\d{4,}$">qq</a></dd> <dd><a href="javascript:;" class="regexplist" title="^[\u4e00-\u9fa5a-zA-Z0-9_]{2,8}$">昵称</a></dd> <dd><a href="javascript:;" class="regexplist" title="">匹配中文字符</a></dd> <dd><a href="javascript:;" class="regexplist" title="">匹配中文字符</a></dd> <dd><a href="javascript:;" class="regexplist" title="">匹配中文字符</a></dd> <dd><a href="javascript:;" class="regexplist" title="">匹配中文字符</a></dd> <dd><a href="javascript:;" class="regexplist" title="">匹配中文字符</a></dd> </dl> </div> <script> //获取 节点 var wrap = document.getElementById("wrap"); var wrapElems = { userText: wrap.querySelector("#usertext"), userRegExp: wrap.querySelector("#userRegExp"), userModifier: wrap.querySelectorAll(".userModifier"), matchingBtn: wrap.querySelector("#matchingBtn"), matchingResult: wrap.querySelector("#matchingResult"), userReplace: wrap.querySelector("#userReplace"), replaceBtn: wrap.querySelector("#replaceBtn"), replaceResult: wrap.querySelector("#replaceResult"), reglist: wrap.querySelector("#reglist").querySelectorAll(".regexplist") }; var modifier = ""; //获得匹配模式modifier for (var i = 0; i < wrapElems.userModifier.length; i++) { wrapElems.userModifier[i].onclick = function () { modifier = ""; for (var j = 0; j < wrapElems.userModifier.length; j++) { if (wrapElems.userModifier[j].checked) { modifier = modifier + wrapElems.userModifier[j].value; } } } } //文本填写错误提示 function errorTip(userTextValue, userRegExpValue, userReplaceValue) { if (!userTextValue) { alert("请输入带匹配的文本"); wrapElems.userText.focus(); return false; } if (!userRegExpValue) { alert("请输入正则表达式"); wrapElems.userRegExp.focus(); return false; } if (!userReplaceValue) { alert("请输入替换本文"); wrapElems.userRegExp.focus(); return false; } return true; } //正则btn点击事件 wrapElems.matchingBtn.onclick = function () { if (!errorTip(wrapElems.userText.value, wrapElems.userRegExp.value, 1)) return; //显示匹配是否成功 var p = new RegExp(wrapElems.userRegExp.value, modifier); wrapElems.matchingResult.innerHTML = p.exec(wrapElems.userText.value) ? wrapElems.userText.value.replace(p, '<strong style="background-color:yellow;">' + p.exec(wrapElems.userText.value) + '</strong') : "没有匹配"; } //替换btn点击事件 wrapElems.replaceBtn.onclick = function () { if (!errorTip(wrapElems.userText.value, wrapElems.userRegExp.value, wrapElems.userReplace.value)) return; //显示匹配是否成功 var p = new RegExp(userRegExp.value, modifier); wrapElems.replaceResult.innerHTML = wrapElems.userText.value.replace(p, wrapElems.userReplace.value); } //点击正则表达式 for (var i = 0; i < wrapElems.reglist.length; i++) { wrapElems.reglist[i].onclick = function () { wrapElems.userRegExp.value = this.title; } } </script> </body> </html>
第一个是点击右边匹配文字字符没反应了,显示没有匹配
第二个就是我选择全局匹配是都不成功,提示没有匹配
第三个如图所示
1回答
好帮手慕夭夭
2019-12-12
同学你好,问题解答如下:
1.老师这边测试是可以匹配的,如下:
同学看看是不是正则表达式前面有空格,删除重新试一试:
正则为:[\u4e00-\u9fa5]*
2. 老师这边测试着结果是null ,这是exec的问题,在全局匹配下,exec一次只会匹配符合条件的一项,每次调用则会在字符串中继续寻找,例如asd 第一次匹配a 第二次匹配s,所以第二次匹配的时候就是null。
建议按照视频中的做法,使用分组。当第一次匹配完毕,然后通过$1这样的形式获取第一次匹配的内容:
3.第三个没有看清楚你匹配的什么,不过按照上面改过来应该就正常了。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题