我需要 - 自动生成文本字符串的标签。在这种情况下,我将使用此字符串:
var text = 'This text talks about loyalty in the Royal Family with Príncipe Charles';
我当前的实现,为6个字符长的单词生成标签,并且工作正常。
words = (text).replace(/[^a-zA-Z\s]/g,function(str){return '';});
words = words.match(/\w{6,}/g);
console.log(words);
这将返回:
["loyalty","Family","Prince","Charles"]
问题在于,有时候,标签应该是一组特定的单词。我需要结果:
["loyalty","Royal Family","Príncipe Charles"]
这意味着,替换/匹配代码应该测试:
我显然在第二个要求中遇到了麻烦。有任何想法吗?谢谢!
答案 0 :(得分:5)
var text = 'This text talks about loyalty in the Royal Family with Prince Charles. Stop at The UK Guardian in London';
text.match(/(([A-Z]\w*\s*){2,})|(\w{6,})/g)
将返回
["loyalty", "Royal Family ", "Prince Charles", "The UK Guardian ", "London"]
要满足第二个要求,最好对找到的匹配项运行另一个正则表达式:
var text = 'This is a Short Set Of Words about the Royal Family'
matches = text.match(/(([A-Z]\w*\s*){2,})|(\w{6,})/g)
matches.filter(function(m) {
return m.match(/\w{6,}/)
});
答案 1 :(得分:0)
好的,这是一个想法。这可能不是最好的方法,但对你来说这可能是一个好的开始。
为了匹配Royal Family
和Prince Charles
,或者甚至The United Kingdom
之类的字符串,您可以编写一个正则表达式,查找以连续大写字母开头的连续字词。< / p>
这可能如下所示:(A-Z(a-z){5,}* )+
然后,您可以使用replace函数生成一个删除了匹配项的新字符串,然后使用原始正则表达式匹配最小长度的单个单词。
更新:在回复有关其他用户回答的评论时,我添加了{5,}
修饰符以指示大写字母后跟五个或更多小写字母和一个空格,一次或多次。