使用特殊字符对UTF-8中的单词进行标记

时间:2017-02-27 14:06:56

标签: javascript node.js string utf-8 tokenize

我试图用Javascript(node.js)中的句子中的单词标记,删除非单词字符(点,逗号,句号,问号等),同时考虑UTF-8中的每个现有字母表(英语,拉丁语,希腊语,西里尔语,日语等)和数字,这意味着我需要一种方法来知道一个字符是一个单词的一部分,还是一个符号。例如:

españa.es 4*5 Rußland Citroën, 東京 iphone-pro5

应该返回一个数组:

[españa, es, 4, 5, Rußland, Citroën, 東京, iphone, pro5]

我正在使用以下正则表达式:

[0-9A-Za-zªº\u00B5\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02AF\u02B0-\u02C1\u0370-\u0374\u0376-\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03FF\u0400-\u0481\u048A-\u0523]+

  

0-9A-Za-z(数字和英文字母)

     

ªº(序数指标)

     

\ u00B5(微信号)

     

\ u00C0- \ u00D6 \ u00D8- \ u00F6 \ u00F8- \ u02AF(非英语拉丁字母)

     

\ u02B0- \ u02C1(修饰符)

     

\ u0370- \ u0374 \ u0376 \ u037A \ \ u037D \ u0386 \ u0388- \ u038A \ u038C \ u038E- \ u03A1 \ u03A3- \ u03FF(希腊文和科普特字母)

     

\ u0400- \ u0481 \ u048A- \ u0523(西里尔字母)

还有其他更简单或更完整的方法来分割文字中的单词吗?

1 个答案:

答案 0 :(得分:3)

使用XRegExp

很容易



var s = "españa.es 4*5 Rußland Citroën, 東京 iphone-pro5";
var r = XRegExp("[\\pL\\pN]+", "g");
var results = XRegExp.match(s, r);
console.log(results);

<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.min.js"></script>
&#13;
&#13;
&#13;

[\\pL\\pN]+正则表达式模式匹配一​​个或多个Unicode字母(\pL)或数字(\pN)。