【问题标题】:normalization for whitespaces in <script> </script> blocks<script> </script> 块中空格的规范化
【发布时间】:2011-02-19 12:07:25
【问题描述】:

我想编写正则表达式来读取 HTML 中 &lt;script&gt;&lt;/script&gt; 块内的数据。作为脚本,我想空白是有灵活性的。为了使我的正则表达式模式健壮,我必须预测不同数量的空白。也许有比在我的模式中放置许多空白匹配器更简单的方法。例如,可能有一个规范化器? (规范化器当然必须理解字符串文字,以免破坏它们。)

我正在使用 .NET 和 Regex 类。 (注意:Regex 类有一个 ECMAScript 选项,我认为它可能会启用一个理解脚本空白但阅读它的描述的功能,似乎没有。)

编辑:Regex 类有一个选项“IgnorePatternWhitespace”,但请注意这在编写 regex 模式时提供了灵活性。它不会改变解析/匹配行为。

我试图避免将空格匹配器以以下类型的模式放置在许多位置:

const string propertyKey = @""".+""";
const string propertyValue = @""".+""";
string property = propertyKey + @"\x3a" + propertyValue;
string actionProperties = property + @"(\x2c" + property + @")*";
string actionPattern = @"\x7b" + actionProperties + @"\x7d";
string contentPattern = actionPattern + @"(\x2c" + actionPattern + @")*";
string corporateActionsPattern = @"corp_actions\s*:\s*""\s*[" + contentPattern + @"]\s*""";

【问题讨论】:

  • 代码,通常script标签包含的代码不能用正则表达式正确解析。
  • 谢谢,很高兴知道。幸运的是,我不需要解析所有脚本代码,只需要解析键值对列表。

标签: javascript .net regex


【解决方案1】:

正如 kirilloid 在 cmets 中已经指出的那样,javascript 语言过于复杂,无法通过正则表达式进行解析。您需要的是一个完全成熟的 javascript 解析器,这是一件很容易编写的事情。

你想通过这个实现什么?

也许有更好的方法,如果这里的人知道你希望从中得到什么,他们可以帮助你:)

【讨论】:

  • 我正在尝试读取如下结构:my_data:"[{k1:v1,k2:v2,k3:v3},{k4:v4},{k5,v5 }]" 所有的键都是字符串,所有的值都是字符串。所以事实上,它们是这样转义的:\"key\":\"000.01\" 这个想法是为了让它对空格的变化具有鲁棒性。
【解决方案2】:

不完美的解决方案是通过删除所有空格来规范化脚本(不仅仅是规范化为单个空格)。字符串文字的完整性受到尊重。正则表达式匹配器变得更容易编写。请注意,Javascript 将被破坏,因为保留字和标识符会在删除空格时相互碰撞,但如果目标是仅解析“数据”部分(即:字符串文字、数字和标点符号),则出现问题的风险很低围绕着他们)。

【讨论】:

  • 我对 Martin 的回答投了赞成票,因为我认为这里的宝贵之处在于认识到没有完美的简单解决方案。
猜你喜欢
  • 2021-09-13
  • 2011-08-23
  • 2018-12-26
  • 2018-01-27
  • 2018-03-12
  • 2011-05-13
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多