我正在使用以下正则表达式
^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$
我知道它很难看,但到目前为止,除了不允许使用反斜杠之外,它还有其他目的,因为它已被转义,我也尝试了\\
而不是\\\
但结果相同。有什么想法吗?
答案 0 :(得分:192)
如果你把它放在一个程序中的字符串中,你实际上可能需要使用四个反斜杠(因为当为字符串“解除”它时,字符串解析器将删除其中的两个,然后正则表达式需要两个用于转义的正则表达式反斜杠。)
例如:
regex("\\\\")
被解释为......
regex("\\" [escaped backslash] followed by "\\" [escaped backslash])
被解释为......
regex(\\)
被解释为匹配单个反斜杠的正则表达式。
根据语言的不同,您可以使用不解析转义序列的不同形式的引用,以避免必须使用尽可能多的引用 - 例如,在Python中:
re.compile(r'\\')
引号前面的r
使其成为 raw 字符串,不会解析反斜杠转义。
答案 1 :(得分:13)
如果它不是文字,则必须使用\\\\
,以便获得\\
,这意味着转义为反斜杠。
那是因为有两种表示形式。在正则表达式的字符串表示中,您有"\\\\"
,这是发送给解析器的内容。解析器将看到\\
,它将其解释为有效的转义反斜杠(与单个反斜杠匹配)。
答案 2 :(得分:8)
反斜杠\
是正则表达式的转义字符。因此,双反斜杠确实意味着单个字面反斜杠。
\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.
答案 3 :(得分:3)
来自http://www.regular-expressions.info/charclass.html:
请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(\\),插入符号(^)和连字符( - )。通常的元字符是字符类中的普通字符,不需要通过反斜杠进行转义。要搜索星号或加号,请使用[+ *]。如果你逃避字符类中的常规元字符,你的正则表达式将正常工作,但这样做会大大降低可读性。
要在字符类中包含反斜杠作为字符而没有任何特殊含义,您必须使用另一个反斜杠转义它。 [\\ x]匹配反斜杠或x。闭括号(]),插入符号(^)和连字符( - )可以通过用反斜杠转义它们,或者将它们置于不具有其特殊含义的位置来包含。我推荐后一种方法,因为它提高了可读性。要包括插入符号,请将其放在开口括号后面的任何位置。 [x ^]匹配x或插入符号。您可以将右侧支架放在开口支架后面,或者使用否定插入符号。 [] x]匹配右括号或x。 [^] x]匹配任何不是右括号或x的字符。连字符可以在开始括号之后,或在右括号之前,或在否定插入符之后。 [-x]和[x-]都匹配x或连字符。
你用什么语言编写正则表达式?
答案 4 :(得分:1)
可以使用吗?最后跳过一个“ \”
regex("\\\\?")
答案 5 :(得分:0)
此解决方案修复了我的问题,同时将br标签替换为'\ n'。
alert(content.replace(/<br\/\>/g,'\n'));