【问题标题】:Regular expression to grab all single letters before a period正则表达式在句点前抓取所有单个字母
【发布时间】:2019-02-19 14:25:49
【问题描述】:

我正在尝试想出一个正则表达式来获取句点之前的所有单个字母。

例如在下面的句子中:

a. Lorem ipsum dolor sit amet, consectetur adipiscing elit, d. Donec euismod magna velit, ac tincidunt nisl faucibus eu

正则表达式应该抓取 a 和 d。

使用

/^([^.]+)/

我能够捕获第一个 a,但不能捕获后续的 d

【问题讨论】:

  • 试试([^,.]+)\.,见this demo。或[^,.]+(?=\.) (demo)。
  • 您当前的正则表达式匹配字符串开头的除点以外的一系列字符,这解释了为什么它匹配字符串中的a 而没有其他匹配。 ^ 表示字符串的开头,(...) 是一个捕获组,在这种情况下可能会被省略,[...] 是一个字符类,[^...] 特别定义了否定字符类,它匹配除了它的字符之外的任何字符包含(除了. 之外的任何内容),+ 是一个量词,它定义了前一个标记(字符类)应至少匹配 1 次并尽可能多地匹配

标签: regex


【解决方案1】:

如果我理解你的话,你要求 lookahead 和 'g' 修饰符:

console.log(
    "a. Lorem bla bla bla d. Donec euismod,,,"
        .match(/[^.](?=\.)/g)
);
// [ 'a', 'd' ]

g 修饰符告诉正则表达式引擎获取所有匹配项,而不是仅获取第一个匹配项。

(?=\.) 是一个 lookahead 断言,声称(但不匹配)'.'就在上一个断言之后。

【讨论】:

    【解决方案2】:

    对于 ASCII 字母 demo

    /([a-z])\./mgi
    

    对于 Unicode 字符 demo:

    /(\p{L})\./mg
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用正向预测 在句点之前获取所有单个字母。见REGEX

      [a-zA-Z](?=\.)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多