2016-07-15 127 views
1

最近我从javascript正则表达式创建了一个正则表达式来检测unicode字体和其他不遵循unicode标准的字体。但现在我得到了转换它的问题。问题是\s\u1031 JavaScript正则表达式模式不允许在迅速。javascript正则表达式和swift正则表达式之间的差异

var regexZG = new RegExp("\s\u1031|\u1031[^\u1000-\u1021\u103b\u1040\u106a\u106b\u107e-\u1084\u108f\u1090]| ေ[က-အ]်|[က-အ]း","g"); 

我该如何在swift中重写它,它也能在swift中工作?

回答

1

你的正则表达式在JavaScript中可能是错误的。对文字字符串使用new RegExp()意味着正则表达式在解析为正则表达式之前必须通过字符串文字解析。这反过来,意味着\s变成了一个普通的s - 匹配一个文字“s”,而不是空格。

在Swift中,你不能在任意字符前面加一个反斜杠,所以你会得到一个invalid escape sequence in literal错误。

在Javascript中,你应该使用文字,而不是一个正则表达式:

var regexZG = /\s\u1031|\u1031[^\u1000-\u1021\u103b\u1040\u106a\u106b\u107e-\u1084\u108f\u1090]| ေ[က-အ]်|[က-အ]း/g; 

在斯威夫特,你需要在特殊的正则表达式序列中的反斜杠类似\s

的另一个问题是,在Unicode的迅速逃逸的形式是\u{XXXX},而不是仅仅\uXXXX的,所以你需要UT斯达康周围所有的代码点值大括号中的\u表达式。

所以雨燕版本看起来是这样的:

"\\s\u{1031}|\u{1031}[^\u{1000}-\u{1021}\u{103b}\u{1040}\u{106a}\u{106b}\u{107e}-\u{1084}\u{108f}\u{1090}]| ေ[က-အ]်|[က-အ]း" 
相关问题