Regex 跨平台共享正则表达式模式
我们正试图在多个平台(应用程序(Android/iOS)、Web(javascript)和后端服务(C#)上共享我们的正则表达式模式 我遇到的一个问题是,所有平台都有不同的正则表达式引擎。可能导致其中一个错误地处理regexp模式 regex模式最初在C#中定义,然后通过Webservice或Bower向其他平台公开。是否需要为模式编写单元测试以确保它在其他平台上工作Regex 跨平台共享正则表达式模式,regex,cross-platform,Regex,Cross Platform,我们正试图在多个平台(应用程序(Android/iOS)、Web(javascript)和后端服务(C#)上共享我们的正则表达式模式 我遇到的一个问题是,所有平台都有不同的正则表达式引擎。可能导致其中一个错误地处理regexp模式 regex模式最初在C#中定义,然后通过Webservice或Bower向其他平台公开。是否需要为模式编写单元测试以确保它在其他平台上工作 我问这个问题的原因是因为我假设有一种通用的正则表达式语言,每个引擎都有自己独特的特性。如果是这样的话,应该可以验证每个模式是否符
我问这个问题的原因是因为我假设有一种通用的正则表达式语言,每个引擎都有自己独特的特性。如果是这样的话,应该可以验证每个模式是否符合通常理解的语言。我建议选择支持最少regex功能的标准作为基础标准,即Javascript 也就是说,列出了JavaScript中可用的内容:
- 仅支持
,g
,i
标志,不支持内联标志m
- 反斜杠在JavaScript中转义
- 使用
[\s\s]
- 无
或\A
锚定以匹配字符串的开头或结尾。使用插入符号或美元代替\Z
- 根本不支持Lookbehind。完全支持前瞻
- 没有原子分组或所有格量词
- 不支持Unicode,但将单个字符与
匹配除外\uFFFF
- 没有命名的捕获组。改为使用编号的捕获组
- 没有模式修饰符来设置正则表达式中的匹配选项
- 没有条件
- 没有正则表达式注释。改为在正则表达式字符串之外使用JavaScript
注释描述正则表达式/
-
、]
和[
字符,主要是必须转义以避免混淆)
请注意,在Java正则表达式字符串中,反斜杠必须进行双转义
正如@nhahdth所提到的,避免使用速记类,而是使用字符类。
\w
在不需要的情况下匹配Unicode字母时,可能会成为真正的罪魁祸首,而且只要提到需要[a-zA-Z0-9]就可以了
相反。要注意不同口味之间的差异。\w
、\s
、\d
。在C#中,速记\w
和\d
识别Unicode字符,而在JavaScript中,\w
和\d
仅匹配ASCII字符。