使用unicode字符提取字符串中的单词

时间:2013-12-06 10:59:15

标签: javascript regex node.js unicode

在javascript(nodejs)中,我需要使用unicode字符索引文本字符串,即给出如下字符串:

"Bonjour à tous le monde, 
je voulais être le premier à vous dire:
  -'comment ça va'
  -<est-ce qu'il fait beau?>" 

我想获得以下数组:

 ["Bonjour", "à", "tous", "le", "monde", "je", "voulais", "être", ... "beau"]

如何使用正则表达式或任何其他方法实现这一目标?

ps:我安装并尝试了xregexp模块,该模块为javascript提供了unicode支持,但对于一般的正则表达式完全没用,我不能走得很远......

3 个答案:

答案 0 :(得分:1)

一个想法可能是将字符串拆分为不属于单词的各种字符,然后过滤掉空字符串:

var str = "Bonjour à tous le monde, je voulais être le premier à vous dire:  -'comment ça va'  -<est-ce qu'il fait beau?>";

var result = str.split(/[-:'"?\s><]+/).filter(function(item) { return item !== '' });
/*
["Bonjour", "à", "tous", "le", "monde,", "je", "voulais", "être", "le", "premier", "à", "vous", "ire", "comment", "ça", "va", "est", "ce", "qu", "il", "fait", "beau"]
*/

类似地,您可以通过上面的否定字符类进行匹配,并且您不必过滤空字符串:

var result = str.match(/[^-:'"?\s><]+/g);

答案 1 :(得分:1)

您可以使用XRegExp bundled with addons的版本(其中包括)添加对正则表达式unicode类别的支持。我们对not an unicode letter\P{L}感兴趣。 然后,您可以按正则表达式XRegExp("\\P{L}+")分割字符串。

var s="Bonjour à tous le monde,\nje voulais être le premier à vous dire:\n  -'comment ça va'\n  -<est-ce qu'il fait beau?>";
var notALetter = XRegExp("\\P{L}+");
var words = XRegExp.split(s, notALetter);

请参阅this fiddle

答案 2 :(得分:1)

您可以使用“uwords”库 - https://github.com/AlexAtNet/uwords。它通过将来自L * Unicode组的字符组合在一起来从文本中提取单词。

它与XRegExp("\\p{L}+")类似,但效果非常快。

示例:

var uwords = require('uwords');
var words = uwords('Bonjour à tous le monde,\n' +
    'je voulais être le premier à vous dire:\n' +
    '-\'comment ça va\'\n' +
    '-<est-ce qu\'il fait beau?>');
console.log(words);

[ 'Bonjour',
  'à',
  'tous',
  'le',
  'monde',
  'je',
  'voulais',
  'être',
  'le',
  'premier',
  'à',
  'vous',
  'dire',
  'comment',
  'ça',
  'va',
  'est',
  'ce',
  'qu',
  'il',
  'fait',
  'beau' ]

P.S。抱歉迟到了 - 我希望它仍然有用。