正则表达式查询帮助 - Lookbehind

时间:2013-03-08 06:45:16

标签: javascript regex regex-negation

这与以下内容有关:Regular Expression - Formatting text in a block - IM但问题不同。

使用以下条件查找-包装文本:

条件:

  • 令牌可以在行的开头或结尾
  • 令牌必须按空格或一个或多个符号包围:{。,!@#$ ....}。
    • 不得为有问题-对的普通字符[a-zA-Z]。
    • 参见样本测试3 ... w-谢谢 -
    • 测试4和5成功,因为-包裹着[^ a-zA-Z]
  • 令牌后面的第一个-或前一个-前面的空格后面不能有空格
    • “ -​​ 哇 - ”不会匹配,因为结束-前面有空格。
    • 参见样本测试6和7

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

我有当前的表达式,但由于在找到第一个-

后转义条件被停止,它失败了
   (^|[\s\W]+)-([^\s][^-]*)-($|[\s\W]+)

示例测试字符串为:

  1. (全部。):-Wow-thank you-.
  2. (哇):-Wow- thank you-!
  3. (NIL):- Wow-thank you-.
  4. (谢谢):- Wow!-thank you-
  5. (谢谢):- Wow -thank you-
  6. (全部):-Wow - thank you-
  7. (NIL):-Wow - thank you -
  8. 这需要看后面吗? (我是一个正念新手,所以请耐心等待)或者我的中间情况完全错了。

    非常感谢! mwolfe。

1 个答案:

答案 0 :(得分:1)

尝试更简单的中间表达。

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

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


编辑。好的,我明白为什么这是错的。您希望非空格字符分别立即跟随并成功打开和关闭破折号。所以试试这个:

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