注释部分对原理的理解是否正确?
来源:3-43 利用replace方法完善正则测试工具
慕前端5517794
2019-06-19 13:25:50
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>正则表达式测试工具</title> <style> #regexp { width: 650px; margin: 100px auto; font-size: 14px; } #regexp .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 .textfield { width: 215px; padding: 5px; border: 1px solid #ccc; } </style> </head> <body> <div id="regexp"> <h1 class="title">正则表达式测试工具</h1> <textarea id="userText" class="textbox" placeholder="在此输入待匹配的文本"></textarea> <p> 正则表达式:<input type="text" id="userRegExp" class="textfield" placeholder="在此输入正则表达式" /> <input type="checkbox" name="userModifier" value="i" />忽略大小写 <input type="checkbox" name="userModifier" value="g" />全局匹配 <input type="checkbox" name="userModifier" value="m" />多行匹配 <input type="button" id="matchingBtn" value="测试匹配" /> </p> 匹配结果: <!-- textarea不支持嵌套标签,更改为div --> <div id="matchingResult" class="textbox readonly"></div> <p> 替换文本:<input type="text" id="userReplaceText" class="textfield" placeholder="在此输入替换文本" /> <input type="button" id="replaceBtn" value="替换" /> </p> 替换结果: <div id="replaceResult" class="textbox readonly"></div> </div> <script> var userText = document.getElementById('userText'), userRegExp = document.getElementById('userRegExp'), userModifier = document.getElementsByName('userModifier'), matchingBtn = document.getElementById('matchingBtn'), matchingResult = document.getElementById('matchingResult'), userReplaceText = document.getElementById('userReplaceText'), replaceBtn = document.getElementById('replaceBtn'), replaceResult = document.getElementById('replaceResult'); var pattern, // 保存模式修饰符 modifier = ''; // userModifier为NodeList节点列表,通过循环添加点击事件 for (var i = 0; i < userModifier.length; i++) { userModifier[i].onclick = function () { // 每次点击需清空modifier,否则每次使用选中的值为不断累加,如iig modifier = ''; // 再次循环并判断节点是否被选中 for (var j = 0; j < userModifier.length; j++) { // checked判断复选框是否被选中 if (userModifier[j].checked) { // 当前节点的value值累加至modifier(保存模式修饰符) modifier += userModifier[j].value; } } } } matchingBtn.onclick = function () { if (!userText.value) { alert('请输入待匹配的文本!'); userText.focus(); // 停止执行以下代码 return; } if (!userRegExp.value) { alert('请输入正则表达式!'); userRegExp.focus(); return; } // 给替换的内容两边添加标签,需要分组,不然无法引用 pattern = new RegExp('(' + userRegExp.value + ')', modifier); // 执行exec是为了判断用户输入的文本(userText.value)是否匹配正则,如果匹配则引用分组($1), // 分组匹配到后的字符串被$1替换,而其带有span标签和黄色样式会一同添加,如果未匹配显示没有匹配 // 不使用三元操作符的情况下,||两边皆为false,userText.value赋值replaceResult.innerHTML原样返回 matchingResult.innerHTML = pattern.exec(userText.value) ? userText.value.replace(pattern, '<span style="background-color: yellow;">$1</span>') : '(没有匹配)'; console.log(matchingResult.innerHTML); console.log(userText.value.replace(pattern, '<span style="background-color: yellow;">$1</span>') === true); console.log('(没有匹配)' == true); } replaceBtn.onclick = function () { // 检测替换文本输入框没有输入 if (!userReplaceText.value) { alert('请输入要替换成的文本!'); // 未输入替换文本,光标焦点定位至替换文本输入框 userReplaceText.focus(); return; } // 如果pattern匹配得到userText.value相应字符串,则添加红色样式。如果没有匹配到,userText.value赋值replaceResult.innerHTML原样返回 replaceResult.innerHTML = userText.value.replace(pattern, '<span style="color: red;">' + userReplaceText.value + '</span>'); console.log(userText.value); } </script> </body> </html>
麻烦老师帮忙看下,谢谢
1回答
好帮手慕夭夭
2019-06-19
你好同学,注释的理解是对的,看的出来同学学习的比较认真也很聪明。继续加油哦,祝学习愉快!
相似问题