不能用 regex 避开反斜杠吗?

我正在使用以下正则表达式

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$

我知道它很难看,但是到目前为止,除了反斜杠不被允许之外,我还尝试了 \\而不是 \\\,但是结果是一样的。有什么想法吗?

302747 次浏览

如果你把它放在一个程序中的一个字符串中,你可能实际上需要使用四个反斜杠(因为字符串解析器在对 绳子进行“反转义”时会移除其中的两个反斜杠,然后对于一个转义的正则表达式反斜杠,正则表达式需要两个反斜杠)。

例如:

regex("\\\\")

被解读为..。

regex("\\" [escaped backslash] followed by "\\" [escaped backslash])

被解读为..。

regex(\\)

被解释为匹配单个反斜杠的正则表达式。


根据语言的不同,您可以使用不解析转义序列的不同形式的引用,以避免使用同样多的引用——例如,在 Python 中:

re.compile(r'\\')

引号前面的 r使它成为一个不解析反斜杠转义的 生的字符串。

如果不是字面值,那么必须使用 \\\\,这样才能得到 \\,这意味着一个转义反斜杠。

那是因为有两种表现形式。在正则表达式的字符串表示中,有 "\\\\",它被发送到解析器。解析器将看到 \\,它将其解释为有效的转义反斜杠(匹配单个反斜杠)。

反斜杠 \是正则表达式的转义字符。因此,双反斜杠确实意味着一个单一的字面反斜杠。

\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.

档号: http://www.regular-expressions.info/reference.html

来自 http://www.regular-expressions.info/charclass.html:

注意,字符类中唯一的特殊字符或元字符是结束括号(])、反斜杠()、插入符(^)和连字符(-)。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。要搜索星号或加号,请使用[ + * ]。如果在字符类中转义常规元字符,那么正则表达式可以正常工作,但是这样做会显著降低可读性。

为了在字符类中包含一个没有任何特殊意义的反斜杠,你必须用另一个反斜杠来转义它。匹配反斜杠或者 x。可以使用反斜杠转义括号(])、插入符号(^)和连字符(-) ,也可以将它们放在不具有特殊含义的位置。我推荐后一种方法,因为它提高了可读性。若要包含插入符号,请将其放在除开括号之外的任何位置。[ x ^ ]匹配一个 x 或一个插入符号。您可以将结束括号放在开始括号的正后方,或者放在否定插入符号的正后方。[] x ]匹配一个闭括号或一个 x。[ ^ ] x ]匹配任何不是闭括号或 x 的字符。连字符可以包括在开始括号之后,或者正好在关闭括号之前,或者正好在否定符号之后。[-x ]和[ x-]都匹配 x 或连字符。

正则表达式是用什么语言写的?

这个解决方案修复了我的问题,同时将 br 标签替换为 n’。

alert(content.replace(/<br\/\>/g,'\n'));

你可以使用? 在最后跳过一个“”

regex("\\\\?")

在某些情况下,可以使用 .而不是 \,从而避免转义反斜杠