1

我有以下代码:

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

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

现在我需要stringToMatch在使用它之前逃脱pattern

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

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

4

1 回答 1

0

这是一个简单的正则表达式,用于从字符串输入中生成安全的正则表达式模式。

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

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

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

于 2013-06-11T20:19:36.987 回答