Javascript正则表达式匹配字符串,除非前面加反斜杠

时间:2009-09-04 21:42:59

标签: javascript regex

如何匹配U1234,而不是Javascript中的\ U1234?

我无法弄清楚如何不匹配单反斜杠。 我能得到的最接近的是:

\[\\]{0}U[0-9]{4}\b

但这不起作用。 有什么建议吗?

6 个答案:

答案 0 :(得分:9)

JavaScript绝对不支持lookbehind断言。在我看来,获得你想要的东西的下一个最好方法是

(?:^|[^\\])(U[0-9]{4})

说明:

(?:          # non-capturing group - if it matches, we don't want to keep it
   ^         # either match the beginning of the string
   |         # or
   [^\\]     # match any character except for a backslash
)            # end of non-capturing group
(U\d{4})     # capturing group number 1: Match U+4 digits

答案 1 :(得分:1)

[^\\]U[0-9]{4}或沿着这些方向的东西。它与主题字符串的最开头的序列不匹配...

答案 2 :(得分:0)

不幸的是,JS似乎不支持正确的语法,即后断言/(?<!\\)U[0-9]{4}/

所以你需要使用:

/[^\\]U[0-9]{4}/

这是regexp文字的语法。如果将regexp放在字符串中,则必须再次转义反斜杠:

"[^\\\\]U[0-9]{4}"

答案 3 :(得分:0)

我建议使用lookbehind,但是JavaScript doesn't seem to support it。也许你可以在U [0-9] {4}上匹配,找到匹配的位置,然后检查左边的字符,看它是否是\?

答案 4 :(得分:0)

JavaScript的RegExp不支持负面的后置断言。建议你只匹配/ [^ \] U /的想法会匹配像“_U”这样的字符串,所以这不是答案。最好的办法是使用两个正则表达式,第一个用于查找所有出现的表达式,然后是第二个用于过滤后视图的表达式。

"\\U0000 U0000".match(/\\?U[0-9]{4}/g)
.filter(function (match) {
    return !/^\\/.test(match)
})

答案 5 :(得分:0)

嗯...是\ ^ U [0-9] {4} \ b适合你吗?