我正在使用JavaScript搜索一段文字。我让用户指定一个任意字符串,然后我想搜索该字符串,条件是它被视为“整个单词”,即在单词边界之间。
我只想说,例如。
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中是否可行?
答案 0 :(得分:1)
userString.replace(/([\[\]*+.?{}()\\^$])/g, "\\$1")
答案 1 :(得分:0)
您需要正确地转义反斜杠。要匹配正则表达式中的单个反斜杠,您需要将其转义一次,以使其被接受为正则表达式中的实际反斜杠。当您将正则表达式存储为字符串时,需要再次转义这两个反斜杠中的每一个,从而生成\\\\
。所以你可以简单地在userString
:
userString = userString.replace(/\\/g, '\\\\');
请注意,无论如何都应该清理用户输入,这样人们就不会想出一些会弄乱你的应用程序的奇怪的正则表达式。