2016-07-15 102 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}]| ေ[က-အ]်|[က-အ]း" 
相關問題