不能用正则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'));