【问题标题】:Automatically generate tags from strings with javascript使用 javascript 从字符串自动生成标签
【发布时间】:2012-07-12 07:21:26
【问题描述】:

我需要 - 自动 - 为文本字符串生成标签。在这种情况下,我将使用这个字符串:

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"]

这意味着,替换/匹配代码应该测试:

  1. 6 个字符长(或更多)的单词;和/或
  2. 如果一组单词以大写字母开头,则这些单词应在同一个数组元素中连接在一起。如果某些单词的长度少于 6 个字符,则无关紧要 - 但其中至少一个必须是 6+,例如:“Stop at The UK Guardián in London”应该返回 ["The UK Guardián", "伦敦”]

我显然在第二个要求方面遇到了麻烦。有任何想法吗?谢谢!

【问题讨论】:

    标签: javascript regex replace match


    【解决方案1】:
    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,}/)
    });
    

    【讨论】:

    • 这似乎可行,但它也会匹配 'I Am Cool',这不是匹配项,因为没有一个单词有 >= 6 个字符。
    • +1,这次更新做得很好。这似乎就像OP想要的那样工作:-)
    • 很好的解决方案!只是一件重要的事情,解决方案应该考虑特殊字符。例如,“Prince Hermione”正在返回 [“Hermione”];并且“superhábilmente”正在返回 ["superh","bilmente"]
    • @andufo:是的。 \w\d 和朋友在 javascript 中不支持 unicode(真可惜!)
    • @andufo:你可以用明确的字符类替换\w,比如[\wéáè]
    【解决方案2】:

    好的,这是一个想法。这可能不是最好的方法,但对您来说可能是一个好的开始。

    为了匹配Royal FamilyPrince Charles 甚至The United Kingdom 之类的字符串,您可以编写一个正则表达式来查找连续以大写字母开头的单词。

    这可能看起来像这样:(A-Z(a-z){5,}* )+

    然后您可以使用替换函数生成一个删除匹配项的新字符串,然后使用您的原始正则表达式匹配最小长度的单个单词。

    更新:为了回应关于其他用户回答的评论,我添加了{5,} 修饰符以指示一个大写字母后跟五个或多个小写字母和一个空格,一个或更多次。

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多