【问题标题】:Regex to capture characters including whitespace between tags正则表达式捕获字符,包括标签之间的空格
【发布时间】:2014-03-19 20:34:34
【问题描述】:

我正在尝试解析短代码:

[shortcode]the content inside[/shortcode]

这很好用,因为它都是一行,但是一旦我有多行,我就无法捕获该组:

[shortcode]
this is 

the content
[/shortcode]

我当前匹配内联文本的表达式是:\[([^\]]*?)\](.*)\[\/\1\]

我无法修改(.*) 部分以捕获包括新行在内的所有内容。 这是要在javascript中使用的,所以我不能使用/s修饰符。

可以在这里看到一个例子:http://regex101.com/r/nZ1hZ4

【问题讨论】:

  • [\w\W] 在 JS 中很漂亮

标签: javascript regex


【解决方案1】:

由于 Javasctipt 不支持 DOTALL 标志,您可以使用 [\s\S] 而不是 DOT 使其匹配新行:

\[([^\]]*?)\]([\s\S]*?)\[\/\1\]

【讨论】:

  • 这很好用,谢谢!为了我自己,你能用人类的语言告诉我[\s\S]*? 翻译成什么吗?我知道\s 是任何空白字符,\S 是任何非空白字符,但是*? 呢?
  • 实际上@anubhava 我刚刚阅读了底部的解释部分,这是有道理的。感谢您的解决方案。
【解决方案2】:

如果要捕获所有内容,请使用[^] 而不是.

\[([^\]]*?)\]([^]*)\[\/\1\]

【讨论】:

  • [^] 失败并说这是一个不完整的字符类。如果我做类似[^SOME SYMBOL] 的事情,它会起作用。但是有没有合适的方法来做到这一点?
  • @Atticus,你能给我一个不适合你的表达吗?它对我有用。
  • @anubhava 否定优先于字面解释......或者我不确定你想说什么。
  • 如果 [^] 在 JS 中工作得很好,很多其他引擎可能会将其视为不平衡的 [,因为插入符号在那个位置代表一个构造。 [] 也会发生同样的情况,这是一个没有内容的类。
  • @sln 这就是问题所在——将其视为不平衡,在字符之后没有以下规则。不知道用什么来填充它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2019-03-08
相关资源
最近更新 更多