【问题标题】:Regex Query Help - Lookbehind正则表达式查询帮助 - Lookbehind
【发布时间】:2013-02-23 15:50:15
【问题描述】:

这与:Regular Expression - Formatting text in a block - IM 有点相关,但问题不同。

寻找-的换行文本,条件如下:

条件:

  • 标记可以位于行首或行尾
  • token 必须用空格或一个或多个符号包围:{.,!@#$....}。
    • 不能是围绕有问题的 - 对的普通字符 [a-zA-Z]。
    • 参见示例测试 3 ...w-谢谢-
    • 测试 4 和 5 成功,因为 - 被 [^a-zA-Z] 包裹
  • 令牌后面不能跟第一个- 的空格或最后一个- 前面的空格
    • “-Wow -”将不匹配,因为结束 - 前面有一个空格。
    • 参见示例测试 6 和 7

对于正则表达式的前面,我需要:(^|[\s\W]+)
最后是:($|[\s\W]+)

我有当前表达式,但由于在找到第一个 - 后转义条件停止而失败

   (^|[\s\W]+)-([^\s][^-]*)-($|[\s\W]+)

示例测试字符串为:

  1. (全部):-Wow-thank you-.
  2. (哇):-Wow- thank you-!
  3. (无):- Wow-thank you-.
  4. (谢谢):- Wow!-thank you-
  5. (谢谢):- Wow -thank you-
  6. (全部):-Wow - thank you-
  7. (无):-Wow - thank you -

这需要向后看吗? (我是一个正则表达式新手,所以请多多包涵)或者我的中间条件完全错误。

非常感谢!
沃尔夫。

【问题讨论】:

  • 我不明白你在第二个条件之后的第一条评论。
  • 示例 3 在这种情况下失败,因为在“-thank you-”之前有一个字符“w”。如果该字符是空格或符号,则“-thank you-”将被识别/标记/找到。这就是示例 4 起作用的原因,因为“-”之前的字符是“!”
  • +1 - 非常好的尝试,特别是对于(自称)新手。
  • 一些不相关的指针,虽然你可能已经知道了。 (1) 注意\w 类包含下划线和数字!使用[a-zA-Z][a-zA-Z0-9] 可能会更好。 (2) 使用/.../i修饰符可以调用不区分大小写的匹配,因此只需要写[a-z][a-z0-9]。 (3) 请注意,字符的世界不仅限于字母、数字和符号。您说令牌必须被空格或一个或多个符号包围。但随后你说,就好像等价一样,它不能被[a-zA-Z] 包围。这些不一定相同。

标签: javascript regex regex-negation


【解决方案1】:

尝试更简单的中间表达式。

(^|[\s\W]+)-(.*?)-($|[\s\W]+)
             ^^^

非贪婪通配符匹配将捕获匹配以下-($|[\s\W]+) 所需的最小字符串。


编辑。好的,我明白为什么不对了。您希望一个非空格字符分别紧跟并接在开头和结尾的破折号之后。所以试试这个:

(^|[\s\W]+)-(\S.*?\S)-($|[\s\W]+)
             ^^   ^^

【讨论】:

  • 好多了。但它没有捕获测试#6
  • 你确定?为我工作:rubular.com/r/xhXidunhmF。除非我误解了你的例子。
  • 谢谢!!!!您在第一篇文章中的 rubular 链接更高级。谢谢你的红包;正在使用 regex101.com 进行测试
  • 但是,是的,您的建议也可以。不过,您可能打算将 [^\s]s 放在捕获组中。
  • 我很感激。非常感谢 acheong87。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
相关资源
最近更新 更多