代码之家  ›  专栏  ›  技术社区  ›  Vincent Tang

Javascript的正则表达式不正确

  •  0
  • Vincent Tang  · 技术社区  · 9 年前
    function palindrome(str) {
      //Clean up string
      var re = '/[^a-z0-9]/gi';
      str=str.toLowerCase();
      str=str.replace(re, '');
      console.log(str);
    
      //Reverse string and check
      var pstr = str.split('').reverse().join('');
      if (pstr === str){
        return true; 
      }
      return false;
    }
    
    palindrome("__Eye");
    

    我想测试一个回文语句。我正在使用 https://regex101.com/

    上面的函数试图检查字符串值是否是回文,如果是,则返回true,如果不是,则返回false

    race car 它的前后拼写相同

    我的正则表达式是 '[^a-z0-9]/gi' 它选择所有标点符号、逗号和空格,以便使用 replace

    enter image description here

    问题:

    console.log(str) 它没有反映出正确的输出。例如

    __eye eye 输出,但不是

    在此处复制测试代码 https://repl.it/JVCf/21

    :

    它的 var re = /[^a-z0-9]/gi; 不是 var re = '/[^a-z0-9]/gi';

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community Mohan Dere    6 年前

    正则表达式模式不是字符串

    从…起 the MDN documentation

    创建RegExp对象有两种方法:文字符号和构造函数。为了指示字符串,文字表示法的参数不使用引号,而构造函数的参数使用引号。因此,以下表达式创建了相同的正则表达式:

    /ab+c/i;
    new RegExp('ab+c', 'i');
    new RegExp(/ab+c/, 'i');

    不同的方法各有利弊。

    function palindrome(str) {
      //Clean up string
      var re = /[^a-z0-9]/g; // note RegEx pattern is not a string
      str=str.toLowerCase();
      str=str.replace(re, '');
      console.log(str);
    
      //Reverse string and check
      var pstr = str.split('').reverse().join('');
      if (pstr === str){
        return true; 
      }
      return false;
    }
    
    palindrome("__Eye");