我有一个用于在 textarea 字段中进行字数统计的 jQuery 函数。此外,它排除了所有在 [[[三方括号]]] 中封闭的单词。它适用于拉丁字符,但它对西里尔语句子有问题。我想该错误部分与正则表达式有关:
$(field).val().replace(/\[\[\[[^\]]*\]\]\]/g, '').match(/\b/g);
两种短语的示例:http: //jsfiddle.net/A3cEG/2/
我需要计算所有单词,包括西里尔语表达,而不仅仅是拉丁语单词。怎么做?
我有一个用于在 textarea 字段中进行字数统计的 jQuery 函数。此外,它排除了所有在 [[[三方括号]]] 中封闭的单词。它适用于拉丁字符,但它对西里尔语句子有问题。我想该错误部分与正则表达式有关:
$(field).val().replace(/\[\[\[[^\]]*\]\]\]/g, '').match(/\b/g);
两种短语的示例:http: //jsfiddle.net/A3cEG/2/
我需要计算所有单词,包括西里尔语表达,而不仅仅是拉丁语单词。怎么做?
JavaScript(至少是最广泛使用的版本)不完全支持 Unicode。即\w
只匹配拉丁字母、十进制数字和下划线( [a-zA-Z0-9_]
),\b
匹配单词字符与非单词字符的边界。
要使用拉丁文或西里尔文查找输入字符串中的所有单词,您必须执行以下操作:
.match(/[\wа-я]+/ig); // where а is the Cyrillic а.
或者,如果您愿意:
.match(/[\w\u0430-\u044f]+/ig);
当然这可能意味着你需要稍微调整你的代码,因为这里它将匹配所有单词而不是单词边界。请注意,与此处[а-я]
所述的“基本西里尔字母”中的任何字母匹配。要匹配此范围之外的字母,您可以根据需要修改字符集以包含这些字母,例如,为了也匹配俄语 Ё/ё,使用.[а-яё]
另请注意,您的三括号模式可以简化为:
.replace(/\[{3}[^]]*]{3}/g, '')
或者,您可能想查看XRegExp项目(这是一个开源项目,用于向基本 JavaScript 正则表达式引擎添加新功能)及其Unicode插件。
请注意使用西里尔字母范围,其中可能包含不必要的字符。有防弹正则表达式只包含西里尔字母:
/^[аАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяЯ]+$/
您可以添加/u标志,它允许您使用 Unicode。
添加此标志时,您的示例将起作用。