regex JavaScript正则表达式分隔符-如何不转义任何斜杠?(/)

yacmzcpb  于 2023-08-08  发布在  Java
关注(0)|答案(3)|浏览(121)

在JavaScript中,有没有办法在正则表达式中使用不同于/(正斜杠)的字符作为分隔符?大多数其他语言都有这样做的方法。
例如,Perl:

m@myregex@

字符串
因此,在Perl中,要匹配包含字符串/tmp的字符串,这是一个有效的正则表达式,没有任何转义并且非常可读:

m@/tmp@


相反,在JavaScript中,似乎我需要编写/\/tmp/或类似的东西。在JavaScript中,我们总是被限制在转义“/”吗?

xwbd5t1u

xwbd5t1u1#

简短的回答是否定的。JavaScript没有提供一种原生方式来表达自定义正则表达式分隔符。
在JavaScript中使用正则表达式的简单方法中,您可以使用/ /来分隔它。然而,同样使用RegExp的本机构造函数,它接受字符串作为第一个参数,您还需要转义斜杠,两次。
以下示例等效于匹配包含值/tmp的字符串:

// 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中,正则表达式必须转义斜杠。

3mpgtkmj

3mpgtkmj2#

我们是否仅限于在JavaScript中使用“/”?
不是很..你可以通过使用new RegExp (string) constructor.来避免使用任何regex定界符

var re = new RegExp (string);

字符串
请记住,这将需要你双逃生,而不是单逃生。

7qhs6swi

7qhs6swi3#

在JavaScript中,如果你想内联一个正则表达式,你唯一的选择就是正斜杠分隔符:第一个月
正如其他答案所指出的,您还可以使用new Regexp("foo")将正则表达式赋给变量。
使用多个分隔符绝对是Perl的事情。在Perl中,你几乎可以使用任何字符作为分隔符,例如字符串:
使用单引号的典型语法--'dipset'
使用q函数--q(dipset)q!dipset!q%dipset%
这是否产生可读的东西取决于上下文。如果结果是可读的,那么Perl允许您这样做是很好的。例如,正则表达式是不可读的,没有一堆转义的反斜杠在里面。

相关问题