在JavaScript中,有没有办法在正则表达式中使用不同于/(正斜杠)的字符作为分隔符?大多数其他语言都有这样做的方法。例如,Perl:
/
m@myregex@
字符串因此,在Perl中,要匹配包含字符串/tmp的字符串,这是一个有效的正则表达式,没有任何转义并且非常可读:
/tmp
m@/tmp@
型相反,在JavaScript中,似乎我需要编写/\/tmp/或类似的东西。在JavaScript中,我们总是被限制在转义“/”吗?
/\/tmp/
xwbd5t1u1#
简短的回答是否定的。JavaScript没有提供一种原生方式来表达自定义正则表达式分隔符。在JavaScript中使用正则表达式的简单方法中,您可以使用/ /来分隔它。然而,同样使用RegExp的本机构造函数,它接受字符串作为第一个参数,您还需要转义斜杠,两次。以下示例等效于匹配包含值/tmp的字符串:
/ /
RegExp
// shortway, you must escape any internal '/' as '\/' // note that you cannot change the delimiter var re = /\/tmp/; // constructor, you must escape any '/' twice as '\\/' // note that you cannot express a delimiter var re = new RegExp('\\/tmp');
字符串因此,在原生JavaScript中,正则表达式必须转义斜杠。
3mpgtkmj2#
我们是否仅限于在JavaScript中使用“/”?不是很..你可以通过使用new RegExp (string) constructor.来避免使用任何regex定界符
new RegExp (string)
var re = new RegExp (string);
字符串请记住,这将需要你双逃生,而不是单逃生。
7qhs6swi3#
在JavaScript中,如果你想内联一个正则表达式,你唯一的选择就是正斜杠分隔符:第一个月正如其他答案所指出的,您还可以使用new Regexp("foo")将正则表达式赋给变量。使用多个分隔符绝对是Perl的事情。在Perl中,你几乎可以使用任何字符作为分隔符,例如字符串:使用单引号的典型语法--'dipset'使用q函数--q(dipset)q!dipset!q%dipset%这是否产生可读的东西取决于上下文。如果结果是可读的,那么Perl允许您这样做是很好的。例如,正则表达式是不可读的,没有一堆转义的反斜杠在里面。
new Regexp("foo")
'dipset'
q(dipset)
q!dipset!
q%dipset%
3条答案
按热度按时间xwbd5t1u1#
简短的回答是否定的。JavaScript没有提供一种原生方式来表达自定义正则表达式分隔符。
在JavaScript中使用正则表达式的简单方法中,您可以使用
/ /
来分隔它。然而,同样使用RegExp
的本机构造函数,它接受字符串作为第一个参数,您还需要转义斜杠,两次。以下示例等效于匹配包含值
/tmp
的字符串:字符串
因此,在原生JavaScript中,正则表达式必须转义斜杠。
3mpgtkmj2#
我们是否仅限于在JavaScript中使用“/”?
不是很..你可以通过使用
new RegExp (string)
constructor.来避免使用任何regex定界符字符串
请记住,这将需要你双逃生,而不是单逃生。
7qhs6swi3#
在JavaScript中,如果你想内联一个正则表达式,你唯一的选择就是正斜杠分隔符:第一个月
正如其他答案所指出的,您还可以使用
new Regexp("foo")
将正则表达式赋给变量。使用多个分隔符绝对是Perl的事情。在Perl中,你几乎可以使用任何字符作为分隔符,例如字符串:
使用单引号的典型语法--
'dipset'
使用q函数--
q(dipset)
q!dipset!
q%dipset%
这是否产生可读的东西取决于上下文。如果结果是可读的,那么Perl允许您这样做是很好的。例如,正则表达式是不可读的,没有一堆转义的反斜杠在里面。