跨平台的共享正则表达式模式

时间:2015-06-24 14:14:56

标签: regex cross-platform

我们正尝试在多个平台(应用程序(Android / iOS),Web(javascript)和后端服务(C#))之间共享我们的RegEx模式。

我预见的一个问题是所有平台都有不同的正则表达式引擎。可能导致其中一个错误地处理正则表达式模式。

正则表达式模式最初在C#中定义,然后通过Webservice或Bower暴露给其他平台。有没有为模式编写单元测试以确保它在其他平台上工作?

我问这个问题的原因是因为我认为有一种常见的正则表达式语言,并且每个引擎都有它自己独特的怪癖。如果是这样,应该可以验证每种模式是否符合通常理解的语言。

1 个答案:

答案 0 :(得分:0)

我建议选择支持最少数量的正则表达式功能的标准作为基础功能,即 Javascript

也就是说,regular-expressions.info列出了JavaScript中可用的内容:

  • 仅支持gim标记,不支持内联标记
  • 反斜杠在JavaScript中转义
  • 使用(?s)
  • 代替[\s\S]修饰符
  • 没有\A\Z个锚点来匹配字符串的开头或结尾。请改用插入符号或美元。
  • 根本不支持Lookbehind。 Lookahead完全支持。
  • 没有原子分组或占有量词。
  • 除了使用\uFFFF匹配单个字符外,不支持Unicode。
  • 没有命名的捕获组。请改用编号的捕获组。
  • 没有模式修饰符可以在正则表达式中设置匹配选项。
  • 无条件。
  • 没有正则表达式评论。在正则表达式字符串之外使用JavaScript //注释来描述正则表达式。

此外,在字符类中使用明确的转义(主要是-][个字符,必须对它们进行转义以避免混淆。)

请注意,在Java正则表达式字符串中,反斜杠必须进行双重转义。

正如@nhahdth所提到的,避免使用速记类,而是使用字符类。当您不需要匹配Unicode字母时,\w可能会成为真正的罪魁祸首,只需提及您需要[a-zA-Z0-9_],这是安全的。