如何使用JavaScript正则表达式在字边界之间找到用户提供的字符串?

时间:2011-11-01 22:32:44

标签: 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 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中是否可行?

2 个答案:

答案 0 :(得分:1)

userString.replace(/([\[\]*+.?{}()\\^$])/g, "\\$1")

答案 1 :(得分:0)

您需要正确地转义反斜杠。要匹配正则表达式中的单个反斜杠,您需要将其转义一次,以使其被接受为正则表达式中的实际反斜杠。当您将正则表达式存储为字符串时,需要再次转义这两个反斜杠中的每一个,从而生成\\\\。所以你可以简单地在userString

中删除斜杠
userString = userString.replace(/\\/g, '\\\\');

请注意,无论如何都应该清理用户输入,这样人们就不会想出一些会弄乱你的应用程序的奇怪的正则表达式。