繁体   English   中英

如何转义RegExp对象中使用的字符串

[英]How do I escape a string used in a RegExp object

我有以下代码:

var stringToMatch = "De$mond. \(blah)";
var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");

return regex.test("testing De$mond.");

现在我需要在pattern使用stringToMatch之前将其转义

如果我理解正确,我在这里找到的解决方案建议使用此方法:

var stringToMatch = "De$mond. \(blah)";
stringToMatch = stringToMatch.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");

var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");

return regex.test("testing De$mond.");

为什么我不能简单地转义stringToMatch所有字符?

例如

  var stringToMatch = "De$mond. \(blah)";
  var stringToMatchAsArrayOfChars = [];
  for (var i = 0; i < stringToMatch.length; i++)
  {
    stringToMatchAsArrayOfChars.push(stringToMatch.substr(i, 1));
  }
  var stringToMatchEscaped = "";
  for (var i = 0; i < stringToMatchAsArrayOfChars.length; i++)
  {
    if (stringToMatchAsArrayOfChars[i] !== " ")
    {
      stringToMatchEscaped = stringToMatchEscaped + "\\" + stringToMatchAsArrayOfChars[i];
    }
    else
    {
      stringToMatchEscaped = stringToMatchEscaped + " ";
    }
  }

  var pattern = "^" + stringToMatch;
  var regex = new RegExp(pattern, "i");

  return regex.test("testing De$mond.");

我知道上述方法更为冗长,但基本上它是:

  var stringToMatchEscaped = "\D\e\$\m\o\n\d\. \\\(\b\l\a\h\)";

但这不起作用。 这是为什么?

而且,除了我提供的链接中建议的方式之外,还有其他转义stringToMatch方式吗? 即没有指定要像// /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g那样转义的字符?

这是一个简单的正则表达式,可通过字符串输入制作安全的正则表达式模式。

  var pattern= "De$mond.";
  var regex = new RegExp(pattern.replace(   /([.*+?^${}()|[\]\/\\])/g   , '\\$1'), "i");

  regex.test("testing De$mond. string here."); // === true

请注意,这意味着您不能使用“通配符”或任何RegExp语法,但是最终将得到一个真正的regexp,它将执行从源文本到模式的文字匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM