笔者最近在一边看《JS高级程序设计3》一边在FCC上找题目练习啊。那叫一个爽。这不,刚刚用生命在课堂,寝室,实验室,图书馆等各种场所将第五章“引用类型”搞定,FCC便知趣的给笔者来了个“回文数”,笔者咬牙切齿,花了两天时间,又是研究数组,又是研究字符串,又是研究作用域,还看了很长时间的正则表达式。还好,不负有心人,嘿嘿嘿,现在为大家详细分享用JS实现精准回文数的辨别!!!
先给大家看几个类型的字符串:
race car
not a palindrome
A man, a plan, a canal. Panama
My age is 0, 0 si ega ym.
0_0 (: /-\ :) 0-0
麻烦啊,又是字母,又是数字,还有下划线,空格,点等等不知道什么东西。。。
所以,我们第一步要做的就是,将不是数字和字母的统统去掉!!!
这里,用到第一个方法了,名字叫做replace(),这里我们重点分享思路,不清楚replace()还有下面一些其它方法的同学自己去查询哦。
好了,我们大概的思路是,replace(exp,"").意思就是,匹配所有的非字符,然后去掉它。
那么问题就来了,正则表达式怎么匹配所有的非字符呢?
这个问题可是让我想破了脑袋啊-.-
开始的时候,有朋友建议我用\s后来才知道,它匹配的是空白字符,所以一些符号却是无法匹配到的
经过了我对正则表达式的一番研究,加上和朋友的一些探讨(登门请教的哦~),终于让我找到了方法
\W+匹配所有的非字符
因为,\w匹配的是数字,字母,所以\W 就是反义了。
然而还没完呢,\W它匹配不了下划线,所以我们还得再加上\_+
到这里,难题基本上解决了。接下来,只要利用引用类型里的方法,确定它是回文数就可以了
请看下面的代码~
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title></title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 function palindrome(str) { 10 // Good luck! 11 var newStr= str.replace(/\W+/g,‘‘);//匹配所有非单词的字符,替换为空字符串 12 newStr= newStr.replace(/\_+/g,‘‘);//匹配所有下划线,替换为空字符串 13 newStr=newStr.toLowerCase(); 14 //转化字符串为小写 15 var arr1= newStr.split(‘‘); 16 console.log(arr1.reverse()); 17 var arr2=arr1.reverse(); 18 19 var newStr2=arr2.join(‘‘); 20 //重构倒序的字符串 21 22 if(newStr==newStr2){//比较1 23 return true; 24 }else{ 25 return false; 26 } 27 } 28 palindrome("not a palindrome"); 29 30 </script> 31 </body> 32 </html>
这里是提醒大家,注意split(‘‘),还有多看看自己的对象是否达到了想要的效果了呢~
分享结束,谢谢大家