不能用正则expression式逃避反斜杠?

我正在使用以下正则expression式

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

我知道这是丑陋的,但迄今为止,它的目的不是反斜杠不被允许,因为我认为它应该是因为它逃脱了,我也试过\\\而不是相同的结果。 有任何想法吗?

如果你把它放在一个程序中的string中,你实际上可能需要使用四个反斜杠(因为stringparsing器会在string“解除转义”时删除它们中的两个,然后正则expression式需要两个逃脱正则expression式反斜杠)。

例如:

 regex("\\\\") 

被解释为…

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

被解释为…

 regex(\\) 

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


根据语言的不同,您可以使用不分析转义序列的不同forms的引用,以避免使用尽可能多的引用 – 例如,在Python中:

 re.compile(r'\\') 

引号前面的r使它成为不分析反斜杠转义的原始string。

如果它不是文字,则必须使用\\\\这样才能得到\\ ,这意味着转义反斜杠。

那是因为有两个表示。 在你的正则expression式的string表示中,你有"\\\\" ,这是什么被发送到parsing器。 parsing器会看到\\它解释为一个有效的反斜杠(匹配一个反斜杠)。

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

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

ref: http : //www.regular-expressions.info/reference.html

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

请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜线(\\),插入符号(^)和连字符( – )。 通常的元字符是字符类中的普通字符,不需要被反斜线转义。 要search星号或加号,请使用[+ *]。 你的正则expression式可以正常工作,如果你逃避字符类中的常规元字符,但这样做会显着降低可读性。

要在字符类中包含一个没有任何特殊含义的字符作为反斜杠,你必须用另一个反斜杠来转义它。 [\\ x]匹配反斜线或x。 括号(]),脱字符(^)和连字符( – )可以用反斜线转义,也可以放在不具有特殊含义的位置。 我推荐后一种方法,因为它提高了可读性。 要包括一个脱字符号,请将它放在除了右括号之后的任何地方。 [x ^]匹配一个x或一个插入符号。 你可以把右括号放在开头的括号之后,或者是否定的脱字符。 [] x]匹配右括号或x。 [^] x]匹配任何不是右括号或x的字符。 连字符可以包含在右括号之后,或者在右括号之前,或者在否定之后。 两个[-x]和[x-]匹配一个x或一个连字符。

你正在写什么语言的正则expression式?

此解决scheme解决了我的问题,同时将br标记replace为'\ n'。

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