代码之家  ›  专栏  ›  技术社区  ›  Nafis

如何在JavaScript中为特殊条件设置正则表达式?

  •  1
  • Nafis  · 技术社区  · 7 年前

    Hashtag字符的限制

    • 在关键字中只使用数字和字母。您可以使用下划线,但出于美观考虑,请谨慎使用。连字符和破折号不起作用。

    • 没有空间

    • 没有特殊字符

    • hashtag可以以数字开头

    • hashtag可以是任何语言

    • 标签可以是表情符号或符号

    我是这样想的,但不包括最后两个条件:

    const subStr = postText.split(/(?=[\s:#,+/][a-zA-Z\d]+)(#+\w{2,})/gm);
    
    const result = _.filter(subStr, word => word.startsWith('#')).map(hashTag => hashTag.substr(1)) || [];
    

    编辑:

    示例:如果我有:

    const postText = "#hello12#123 #hi #£hihi #This is #👩 #Hyvääpäivää #Dzieńdobry #जलवायुपरिवर्तन an #example of some text with #hash-tags - http://www.example.com/#anchor but dont want the link,#hashtag1,hi #123 hfg skjdf kjsdhf jsdhf kjhsdf kjhsdf khdsf kjhsdf kjhdsf hjjhjhf kjhsdjhd kjhsdfkjhsd #lasthashtag";
    

    结果应该是:

    ["hello12", "123", "hi", "This", "👩", "Hyvääpäivää", "Dzieńdobry", "जलवायुपरिवर्तन", "example", "hash", "anchor", "hashtag1", "123", "lasthashtag"]
    

    我现在所拥有的:

    ["hello12", "123", "hi", "This", "Hyv", "Dzie", "example", "hash", "anchor", "hashtag1", "123", "lasthashtag"]
    

    注意:我不想使用JavaScript库。

    2 回复  |  直到 7 年前
        1
  •  1
  •   41686d6564    7 年前

    假设hashtag中不允许的字符是 !$%^&*+. , (根据您的示例),您可以使用以下正则表达式模式:

    /#[^\s!$%^&*+.,#]+/gm
    

    Here's a demo .

    JavaScript代码示例:

    const regex = /#[^\s!$%^&*+.,#]+/gm;
    const str = "#hello12#123 #hi #£hihi #This is #👩 #Hyvääpäivää #Dzieńdobry #जलवायुपरिवर्तन an #example of some text with #hash-tags - http://www.example.com/#anchor but dont want the link,#hashtag1,hi #123 hfg skjdf kjsdhf jsdhf kjhsdf kjhsdf khdsf kjhsdf kjhdsf hjjhjhf kjhsdjhd kjhsdfkjhsd #lasthashtag";
    let m;
    
    while ((m = regex.exec(str)) !== null) {
        if (m.index === regex.lastIndex) {
            regex.lastIndex++;
        }
        
        m.forEach((match) => {
            console.log("Found match: " + match);
        });
    }
        2
  •  0
  •   Nafis    7 年前

    这是一个可能的解决方案,没有 while 这对我很有用,谢谢 @Ahmed Abdelhameed 对于模式:

    function getHashTags(postText) {
      const regex = /#[^\s!$%^&*+.,£#]+/gm;
      const selectedHashTag = [];
      const subStr = postText.split(' ');
      const checkHashTag = _.filter(subStr, word => word.startsWith('#') || word.includes('#'));
    
      checkHashTag.map((hashTags) => {
        if (hashTags.match(regex)) {
          hashTags.match(regex).map(hashTag => selectedHashTag.push(hashTag.substr(1)));
        }
        return true;
      });
      return selectedHashTag;
    }