javascript - 正则表达式解析带有转义字符的字符串

标签 javascript regex

我正在从格式化的字符串中读取信息。 格式如下所示:

"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/

相关文章:

Javascript 获取所选文本节点的 HTML

javascript - 如何用正则表达式replace去掉0开头的字符?

javascript - 如何使用前一个选择的值进行多项选择

Javascript 正则表达式匹配列表

c# - 替换为 .Replace/.Regex

regex - 当任何字符串至少包含三个字符且 + 号被最少三个字符包围时匹配的正则表达式

正则表达式字符串匹配所有未包装的内容

java - 如何使用模式匹配器仅获取与 Java 中的正则表达式匹配的第一行?

javascript - 从桑基图中的图例中排除实体

javascript - 使用 jQuery 或 CSS 更改 Android 键盘的方向