Javascript 使用正则表达式识别以特定字符(#)结尾的所有标记/单词

Javascript 使用正则表达式识别以特定字符(#)结尾的所有标记/单词,javascript,regex,string,pattern-matching,Javascript,Regex,String,Pattern Matching,我花了大约6个多小时的时间在网上搜寻,试图找出以下几点: 我需要一个javascript正则表达式来标识#字符位于标记的末尾 标记分隔符是一个空白 我有以下正则表达式:/(\w+[#])/ig 3a。上述正则表达式的问题是,它将返回99999#和999#和a#dfkjdf#dfd#(散列位于字符串/令牌中间) 测试数据看起来像一个文本字符串: (78890)asbcjh-(78890 999)werer 9999)今天(999)a)dfkjdf(dfd)f 因此,结果集应为9999 ,仅适用于上

我花了大约6个多小时的时间在网上搜寻,试图找出以下几点:

  • 我需要一个javascript正则表达式来标识
    #
    字符位于标记的末尾
  • 标记分隔符是一个空白
  • 我有以下正则表达式:
    /(\w+[#])/ig
    3a。上述正则表达式的问题是,它将返回
    99999#
    999#
    a#dfkjdf#dfd#
    (散列位于字符串/令牌中间)
  • 测试数据看起来像一个文本字符串:
    (78890)asbcjh-(78890 999)werer 9999)今天(999)a)dfkjdf(dfd)f
  • 因此,结果集应为
    9999 
    ,仅适用于上述情况

  • 对于此类测试数据:
    "78890"1ASBCJH-"78890 999"Werr 9999"999"今天"a"dfkjdf"dfd"f

  • 结果集应为:
    99999#今天#

  • 请求背后的原因是,我们的应用程序具有“拒绝”关键字功能,因此我希望拒绝所有以
    结尾的令牌/单词,例如UPS
    09870
    (可能是UPS办公地点,我只需要UPS)

    我们的应用程序还有一个“接受”功能(基于Regex),它将保持UPS值

    PS-我有正则表达式来测试以
    开头的单词/标记,如下所示:
    /(^\s)#((-124;\ w+)/ig

    提前感谢您的帮助。

    您可以使用

    /(?:^|\s)\w+#(?!\S)/g
    

    详细信息

    • (?:^ |\s)
      -字符串或空格的开头
    • \w+
      -1+字字符
    • -a
      字符
    • (?!\S)
      -在
      #
      之后需要空格或字符串结尾
    JS演示:

    console.log(
    “"78890"asbcjh-"78890 999"Werr 9999"999"今天"a"dfkjdf"dfd"
    .match(/(?:^|\s)\w+#(?!\s)/g)
    .map(函数(x){return x.trim();})
    
    )
    我根本不会使用正则表达式,它们对这项任务来说太过分了

    function accept(s) {
        return s.split(' ').filter(x => x.endsWith('#'));
    }
    

    结果将是一个匹配单词的数组。如果您想要一个包含列表的字符串,请将
    .join(“”)
    添加到链的末尾。

    您可以将
    split()
    filter()
    方法与结合使用,以获得所需的结果:

    str.split(" ").filter(v => v.match(/\w+#$/));
    
    演示:

    这是一个工作演示:

    var str=“#78890#1ASBCJH-#78890 999#werer 9999#今天#999#a#dfkjdf#dfd#;
    var results=str.split(“”).filter(v=>v.match(/\w+#$/);
    
    console.log(results);
    我也尝试了一些解决方案:
    \b(\W+)*[y] [b/p>对不起,格式化,这些数字应该使阅读更容易。我的答案提供了正则表达式解决方案。请考虑通过点击接受答案。✓ 如果我的答案对您有帮助,请单击左侧(请参见)并向上投票(请参见)确实比正则表达式好,很好的方法。@chŝdk它还有对不匹配的字符不敏感的优点。
    \w
    。是的,确实使用它是100%安全的,不管#前面的字符是什么,你比我先到了;)谢谢你的回答。不幸的是,它必须是一个正则表达式。@AndyS为什么?如果这是人为的限制(例如,因为这是家庭作业),你应该这么说。正则表达式上的
    /g
    限定符是多余的。@Alnitak是的,我已经指出了,我只是从我测试的正则表达式101复制了它。谢谢;)当然,您可以通过从正则表达式中完全省略
    \w+
    来确保这个“安全”的re:other字符,即
    v.match(/#$/)
    。嗯,是的,这是真的,尽管OP从未明确定义什么是令牌。我的
    .endsWith()
    解决方案在技术上也存在同样的问题。