Javascript的正则表达式表达式不正确

时间:2017-07-11 01:36:43

标签: javascript regex error-handling

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/使用示例语句测试我的regEx语句

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

Palindromes就像race car那样拼写相同的向前和向后

我的正则表达式是'[^a-z0-9]/gi',它选择所有标点符号,逗号和空格,以便使用replace原型字符串方法删除它们。在测试正则表达式时,它看起来很好,见下文

enter image description here

问题:

有人能说清楚我在做错了吗?我遇到的问题是我console.log(str)并且它没有反映出正确的输出。 e.g。

__eye输入应该导致eye输出但不是

在此处重新测试代码https://repl.it/JVCf/21

解决编辑问题

var re = /[^a-z0-9]/gi; NOT var re = '/[^a-z0-9]/gi';

1 个答案:

答案 0 :(得分:1)

RegEx Pattern不是字符串

来自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");