1. 程式人生 > >JavaScript使用正則表示式判斷迴文字串

JavaScript使用正則表示式判斷迴文字串

雖然對演算法算不上精通,但是一些基礎的我對自己還是有點信心的,沒想到今天用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; } } }
歡迎大家加入QQ群一起交流討論,「吟遊」程式人生——YinyouPoet