我正在从格式化的字符串中读取信息。格式如下:
"foo:bar:beer:123::lol"
Run Code Online (Sandbox Code Playgroud)
“:”之间的所有内容都是我想使用正则表达式提取的数据。如果一个:后跟另一个:(例如“ ::”),则此数据必须为“”(空字符串)。
目前,我正在使用此正则表达式进行解析:
(.*?)(:|$)
Run Code Online (Sandbox Code Playgroud)
现在我想到数据中也可能存在“:”。所以它必须被逃脱。例:
"foo:bar:beer:\::1337"
Run Code Online (Sandbox Code Playgroud)
如何更改正则表达式,使其也与数据中的“ \:”匹配?
编辑:我使用JavaScript作为编程语言。对于复杂的regulat表达式,似乎有一些限制。该解决方案也应在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);
}
Run Code Online (Sandbox Code Playgroud)
输入:"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
Run Code Online (Sandbox Code Playgroud)