正向/负向和前瞻/后顾混淆?

3
s = "some {text|in|braces} found"

获取大括号之间的内容
s.scan(/(?<={).*(?=})/) #=> ["text|in|braces"]

现在我想获取括号外的内容,我尝试了
s.scan(/(?<!{).*(?!})/) #=> ["some {text|in|braces} found", ""]

显然,我错过了非常重要的东西。
2个回答

2
你的第二个正则表达式是在寻找:
  • 一个任意字符串 ".*"
  • 它前面没有 "{"
  • 它后面没有 "}"
当然,这将匹配整个字符串,因为 "some {text|in|braces} found" 既不以 "{" 开头,也不以 "}" 结尾。

使用预测/回顾来获取不在大括号中的内容的正确表达式是什么? - Bala
1
定义“不在大括号内”。你希望它返回“找到一些”吗? - Frank Schmitt

0

不要忘记使用 \ ")(?{}" 转义特殊字符。

您可以通过两个操作来解决此问题,首先可以使用以下正则表达式隔离参数:

s  = s.gsub(/.*(\{.*\})  # => "text|in|braces"
s.scan(/\w+/) # => ["text", "in", "braces"]

或者

s.gsub(/.*(\{.*\}).scan(/\w+/)  # => ["text", "in", "braces"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接