我正在从格式化的字符串中读取信息。 格式如下所示:
"foo:bar:beer:123::lol"
“:”之间的所有内容都是我想用正则表达式提取的数据。如果 : 后跟另一个 :(如“::”),则此数据必须为“”(空字符串)。
目前我正在用这个正则表达式解析它:
(.*?)(:|$)
现在我想到“:”也可能存在于数据中。所以它必须逃脱。 示例:
"foo:bar:beer:\::1337"
我怎样才能改变我的正则表达式,使它也匹配“\:”作为数据?
编辑:我使用 JavaScript 作为编程语言。它似乎对复杂的正则表达式有一些限制。该解决方案也应该适用于 JavaScript。
谢谢, 麦克法兰
最佳答案
var myregexp = /((?:\\.|[^\\:])*)(?::|$)/g;
var match = myregexp.exec(subject);
while (match != null) {
for (var i = 0; i < match.length; i++) {
// Add match[1] to the list of matches
}
match = myregexp.exec(subject);
}
输入:"foo:bar:beer:\\::1337"
输出:["foo", "bar", "beer", "\\:", "", "1337", ""]
你总是会得到一个空字符串作为最后一个匹配项。这是不可避免的,因为您还希望空字符串在定界符之间匹配(并且 JavaScript 中缺少后向断言)。
解释:
( # Match and capture:
(?: # Either match...
\\. # an escaped character
| # or
[^\\:] # any character except backslash or colon
)* # zero or more times
) # End of capturing group
(?::|$) # Match (but don't capture) a colon or end-of-string
关于javascript - 正则表达式解析带有转义字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10208694/