我们正尝试在多个平台(应用程序(Android / iOS),Web(javascript)和后端服务(C#))之间共享我们的RegEx模式。
我预见的一个问题是所有平台都有不同的正则表达式引擎。可能导致其中一个错误地处理正则表达式模式。
正则表达式模式最初在C#中定义,然后通过Webservice或Bower暴露给其他平台。有没有为模式编写单元测试以确保它在其他平台上工作?
我问这个问题的原因是因为我认为有一种常见的正则表达式语言,并且每个引擎都有它自己独特的怪癖。如果是这样,应该可以验证每种模式是否符合通常理解的语言。
答案 0 :(得分:0)
我建议选择支持最少数量的正则表达式功能的标准作为基础功能,即 Javascript 。
也就是说,regular-expressions.info列出了JavaScript中可用的内容:
g
,i
,m
标记,不支持内联标记(?s)
[\s\S]
修饰符
\A
或\Z
个锚点来匹配字符串的开头或结尾。请改用插入符号或美元。\uFFFF
匹配单个字符外,不支持Unicode。//
注释来描述正则表达式。此外,在字符类中使用明确的转义(主要是-
,]
和[
个字符,必须对它们进行转义以避免混淆。)
请注意,在Java正则表达式字符串中,反斜杠必须进行双重转义。
正如@nhahdth所提到的,避免使用速记类,而是使用字符类。当您不需要匹配Unicode字母时,\w
可能会成为真正的罪魁祸首,只需提及您需要[a-zA-Z0-9_]
,这是安全的。