JavaScript使用正則表示式判斷迴文字串
阿新 • • 發佈:2019-02-16
雖然對演算法算不上精通,但是一些基礎的我對自己還是有點信心的,沒想到今天用js判斷迴文字串居然翻船了,講起來也是對js的函式運用不熟練。
題目如下:
檢查迴文字串
如果給定的字串是迴文,返回true,反之,返回false。
如果一個字串忽略標點符號、大小寫和空格,正著讀和反著讀一模一樣,那麼這個字串就是palindrome(迴文)。
注意你需要去掉字串多餘的標點符號和空格,然後把字串轉化成小寫來驗證此字串是否為迴文。
函式引數的值可以為”racecar”,”RaceCar”和”race CAR”。
講起來很簡單,就是先把字串變成小寫,去掉空格和特殊字元,然後從兩頭開始往中間判斷一下就行了。
而問題的難點就在於如何去掉特殊字元。
js自帶了有個函式叫String.replace(),可是居然是用正則表示式來判斷的,那麼在這裡如何使用正則式呢
正則表示式的簡單匹配:
/abc/g
這一句匹配的就是abc字串,g代表全域性,那麼正則表示式的“或”怎麼表示呢
有兩種辦法:
以匹配a或b或c為例
1、[abc]
2、(a|b|c)
但是這兩種方法不一樣,但是在此處達成的效果是相同的。這兩種都是匹配abc的某一個元素,即a或b或c。
但是[]和()在正則表示式中具有本質區別,舉個栗子:
剛說了,[abc]匹配的是a或b或c
但是(abc)匹配的就是“abc”這個字串,不能多也不能少的”abc”字串,而如果是(abc|def)則比配的是”abc”或者”def”這一個整體。
然後對於特殊字元還需要轉義,轉義字元肯定是“\”咯。
最後放上程式碼:
function palindrome(str) {
// 請把你的程式碼寫在這裡
str = str.toLowerCase();
str = str.replace(/ /g,'');
str=str.replace(/[\,\.\:\_\/\\\(\)\-]/g,'');
var i=0,e = str.length-1;
console.log(e+1);
while(true){
if(i>=e){
return true;
}
if(str[i]==str [e]){
i++;
e--;
continue;
}else{
return false;
}
}
}