2015-01-07 31 views
1

对不起,英文不好,使用谷歌翻译如何通过书写系统(SCRIPT)来匹配unicode?

什么正则表达式(REGEX)将能够通过脚本类型对应?示例:\p{Script: Latin} | \p{Script: Zyyy} | \p{Script: Greek}

主要目标是使用表达式来检查PHP和JAVASCRIPT中的字符串。但是,在所有语言中起作用是理想的。

而且还需要声明能够找到负的情况下,例如: [^a] | [^\p{Script: Latin}]

在下面的网站上,对每个脚本范围列表。但把它变成一个单一的字符串已经引起特别Zyyy脚本的分歧,并且不应该。

有人可以帮我吗?

+0

补充......上面的网站上的“Zyyy”是“Common”的昵称 – user2716342

+1

'\ p {Script:Latin}'这些在JavaScript上不受支持。 http://www.regular-expressions.info/refunicode.html – Mouser

+0

感谢Mouser。您提供的这个网站表示\ p {Common}或\ p {Greek}可以在PHP和JAVASCRIPT上使用XRegExp。虽然这个理想可能是全面的,不需要插件,但这对我来说已经很有帮助。在Chrome和Firefox中测试,并且工作。感谢U.http://www.regular-expressions.info/unicode.html#script – user2716342

回答

1

如果您只需要一个可识别Unicode的正则表达式,那么您可能不想为整个XRegExp库+其Unicode插件提供这个功能。另一种解决方案是使用构建脚本,使用Regeneratethe Unicode data packages编译正则表达式。

这里是一个什么样子的Node.js的:

var regenerate = require('regenerate'); 

// Latin script 
var Latin = require('unicode-7.0.0/scripts/Latin/code-points'); 
// Greek script 
var Greek = require('unicode-7.0.0/scripts/Greek/code-points'); 

var set = regenerate() // Start with an empty set. 
    .add(Latin) // Add Latin script code points. 
    .add(Greek) // Add Greek script code points. 

// Print the result. 
console.log(set.toString()); 

运行npm install regenerate unicode-7.0.0,然后如下运行此脚本:

node generate-regular-expression.js 

它输出以下:

[A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D00-\u1D2A\u1D2C-\u1D77\u1D79-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2071\u207F\u2090-\u209C\u2126\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A]|\uD800[\uDD40-\uDD8C\uDDA0]|\uD834[\uDE00-\uDE45] 

这可以直接用作正则表达式文字的一部分。

这种方法的主要优点是你永远不必手动调整正则表达式。相反,您可以通过添加或删除某些符号来更改生成该脚本的脚本,然后再次运行它。该脚本的代码比任何正则表达式,恕我直言,更易于阅读和维护。另外,输出结果尽可能的紧凑:而不是将整个库作为运行时依赖项引入,只需插入一个正则表达式即可。