在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支持,但对于一般的正则表达式完全没用,我不能走得很远......
答案 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。抱歉迟到了 - 我希望它仍然有用。