javascript正则表达式和swift正则表达式之间的不同
最近,我从javascript正则表达式中为swift创建了一个正则表达式,用于检测unicode字体和其他不符合unicode标准的字体。但现在我遇到了转换它的问题。问题是javascript正则表达式和swift正则表达式之间的不同,javascript,swift,unicode,ios9,Javascript,Swift,Unicode,Ios9,最近,我从javascript正则表达式中为swift创建了一个正则表达式,用于检测unicode字体和其他不符合unicode标准的字体。但现在我遇到了转换它的问题。问题是\s\u1031javascript正则表达式模式不允许在swift中使用 var regexZG = new RegExp("\s\u1031|\u1031[^\u1000-\u1021\u103b\u1040\u106a\u106b\u107e-\u1084\u108f\u1090]| ေ[က-အ]်|[က-အ]း","
\s\u1031
javascript正则表达式模式不允许在swift中使用
var regexZG = new RegExp("\s\u1031|\u1031[^\u1000-\u1021\u103b\u1040\u106a\u106b\u107e-\u1084\u108f\u1090]| ေ[က-အ]်|[က-အ]း","g");
我如何在swift中重写它,它也将在swift中工作?swift对任意unicode字符有不同的语法,
\u{n}
任意Unicode标量,写为\u{n},其中n是一个1–8位的十六进制数,其值等于有效的Unicode代码点
因此,在您的例子中,它是
\u{1031}
而不是\u1031
您的正则表达式在Javascript中也可能是错误的。将new RegExp()
与文本字符串一起使用意味着regex必须先通过字符串文本解析,然后才能解析为正则表达式。这反过来意味着\s
变成了一个普通的s
——匹配的是文字“s”,而不是空白
在Swift中,您不能在任意字符前面加反斜杠,因此在文本中会出现无效的转义序列
在Javascript中,应改用正则表达式文字:
var regexZG = /\s\u1031|\u1031[^\u1000-\u1021\u103b\u1040\u106a\u106b\u107e-\u1084\u108f\u1090]| ေ[က-အ]်|[က-အ]း/g;
在Swift中,您需要在特殊的正则表达式序列(如\s
)中将反斜杠加倍
另一个问题是swift中的Unicode转义的形式是\u{XXXX}
,而不仅仅是\uxxx
,因此需要在\u
表达式中的所有代码点值周围使用大括号
所以Swift版本看起来像这样:
"\\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}]| ေ[က-အ]်|[က-အ]း"