Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript正则表达式在单词边界之间找到用户提供的字符串?_Javascript_Regex_Escaping - Fatal编程技术网

如何使用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

我有一个使用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中可能吗?

您需要正确地转义反斜杠。要匹配正则表达式中的单个反斜杠,需要将其转义一次,以使其作为正则表达式中的实际反斜杠被接受。当您将正则表达式存储为字符串时,需要再次转义这两个反斜杠中的每一个,从而产生
\\\\
。因此,您只需在
用户字符串中转义斜杠即可:

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

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

哦,我明白清理的意思,只是我不希望他们能够使用任何实际的正则表达式参数。对于regexp,我需要类似于SQL准备语句的东西。我可以先试试托马拉克的解决方案。