Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript正则表达式和swift正则表达式之间的不同_Javascript_Swift_Unicode_Ios9 - Fatal编程技术网

javascript正则表达式和swift正则表达式之间的不同

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]| ေ[က-အ]်|[က-အ]း","

最近,我从javascript正则表达式中为swift创建了一个正则表达式,用于检测unicode字体和其他不符合unicode标准的字体。但现在我遇到了转换它的问题。问题是
\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}]| ေ[က-အ]်|[က-အ]း"