如何使用JavaScript正则表达式在单词边界之间找到用户提供的字符串?
我有一个使用JavaScript搜索的文本体。我让用户指定一个任意字符串,然后我想搜索该字符串,条件是它被视为“整个单词”,即在单词边界之间 我只想说如何使用JavaScript正则表达式在单词边界之间找到用户提供的字符串?,javascript,regex,escaping,Javascript,Regex,Escaping,我有一个使用JavaScript搜索的文本体。我让用户指定一个任意字符串,然后我想搜索该字符串,条件是它被视为“整个单词”,即在单词边界之间 我只想说 var userString = "something blah"; // => "blah another thing blah" "blah something blah blah".replace(new RegExp("\\b" + userString + "\\b"), "another thing"); // no mat
var userString = "something blah";
// => "blah another thing blah"
"blah something blah blah".replace(new RegExp("\\b" + userString + "\\b"), "another thing");
// no match, good
"blahsomething blah blah".replace(new RegExp("\\b" + userString + "\\b"), "another thing");
userString = "something\\blah";
// want to match, but doesn't
"blah something\\blah blah".replace(new RegExp("\\b" + userString + "\\b"), "another thing");
正如您所看到的,它针对特殊字符进行分解——我需要一种方法来告诉RegExp转义用户输入,或者将表达式的一部分保留为文本。这在JavaScript中可能吗?您需要正确地转义反斜杠。要匹配正则表达式中的单个反斜杠,需要将其转义一次,以使其作为正则表达式中的实际反斜杠被接受。当您将正则表达式存储为字符串时,需要再次转义这两个反斜杠中的每一个,从而产生
\\\\
。因此,您只需在用户字符串中转义斜杠即可:
userString.replace(/([\[\]*+.?{}()\\^$])/g, "\\$1")
userString = userString.replace(/\\/g, '\\\\');
请注意,无论如何,您都应该清理您的用户输入,这样人们就不会想出一些奇怪的正则表达式来扰乱您的应用程序。哦,我明白清理的意思,只是我不希望他们能够使用任何实际的正则表达式参数。对于regexp,我需要类似于SQL准备语句的东西。我可以先试试托马拉克的解决方案。