Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 - Fatal编程技术网

Javascript 这个正则表达式的作用是什么:/[\[]/?

Javascript 这个正则表达式的作用是什么:/[\[]/?,javascript,regex,Javascript,Regex,我很难理解这意味着什么:/[\[]/为什么有两个replace语句 name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); /[\[]/是一个 在第一个替换中,您将用\[替换[,在第二个替换中替换符号 它看起来很奇怪,因为有很多(大部分是无用的)转义:[在正则表达式中转义,\和[在字符串文本中转义 第一个正则表达式可以这样分析: /:正则表达式打开 [:字符集打开 \[:字符[(带有转义,因为它在集合中是无用的) ]:字符集关

我很难理解这意味着什么:
/[\[]/
为什么有两个replace语句

name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
/[\[]/
是一个

在第一个替换中,您将用
\[
替换
[
,在第二个替换中替换符号

它看起来很奇怪,因为有很多(大部分是无用的)转义:
[
在正则表达式中转义,
\
[
在字符串文本中转义

第一个正则表达式可以这样分析:

  • /
    :正则表达式打开
  • [
    :字符集打开
  • \[
    :字符
    [
    (带有转义,因为它在集合中是无用的)
  • ]
    :字符集关闭
  • /
    :正则表达式关闭
这些正则表达式在我看来太冗长了:如果一个字符集中只有一个字符,那么就不需要该字符集,也不需要在字符串文本中转义
[

你本可以做到的

 name = name.replace(/\[/, "\\[").replace(/\]/, "\\]");
比如说

 'a [ b c ] d [ e ]'.replace(/\[/, "\\[").replace(/\]/, "\\]")
给予

请注意,由于没有
g
修饰符,因此每次调用
replace
,您只需进行一次替换,这可能不是目标,因此您可能需要

 name = name.replace(/\[/g, "\\[").replace(/\]/g, "\\]");

这就是使用正则表达式。如果你不熟悉正则表达式,你可能会想先使用它。

这并不是Javascript特有的,正则表达式在大多数编程语言中都使用,只是略有不同。了解正则表达式后,你会发现它是非常有用的!

也许你会看到它在e例

var name = "[[[[[]]]]]]]";
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
console.log(name);
因此,您将拥有

\[[[[[\]]]]]]] 

这个正则表达式将第一次出现的
[
替换为
\[
,第一次出现的
]
替换为
\]

很抱歉,我必须慢一点-我仍然不明白。例如,如果我理解正确,在/[[]/中,我很确定在PCRE中,你不必跳出方括号,即
/[[]/
可以很好地工作。(这对于
/[]]/
来说绝对是正确的,尽管看起来是错误的。)但是是的,
/\[/
应该是最清晰的。@acheong87我也这么认为,但我已经建议去掉这个集合,所以我不想再详细说明了。最让我吃惊的是字符串文本中的转义。不是每个人都很熟悉正则表达式,但大多数程序员并没有转义字符串文本中的所有字符…@acheong87我在我的答案中找到了一个位置说到这个事实,[逃跑也没用。@fishman你知道你应该接受答案吗。
\[[[[[\]]]]]]]