【问题标题】:Regex to strip trailing cashtags / hashtags正则表达式去除尾随现金标签/主题标签
【发布时间】:2018-02-07 00:37:48
【问题描述】:

我想要一个 Javascript 正则表达式,它将从 Tweet 文本中删除 尾随 主题标签或现金标签。


示例 1

输入:这是一个#test

输出:这是一个

示例 2

输入:这是一个#test,但它更复杂#complicated $test $omg

输出:这是一个#test,但还有更多

示例 3

输入:这个例子甚至#includes

一个新的#line 和一个http://www.link.com $wow

输出: 这个例子甚至#includes 一个新的#line 和一个http://www.link.com


到目前为止,我已经得到了 (^|\s)((#[a-z\d-]+)|(\$[a-z\d-]+)) - 但是,这会删除 any 位置的所有现金标签或主题标签,并错误地删除非尾随标签。

我将如何改进这个正则表达式以保留那些不在末尾的现金标签/主题标签?

【问题讨论】:

  • 你忘了把“尾随”的概念放在regex中。

标签: javascript regex


【解决方案1】:

您使用的regex 不包含关于匹配尾随标签的信息。

试试这个:

/(?:\s*[#$][a-z\d-]+)+$/i

含义:

/                # regex delimiter
(?:              # start of a non-capturing group
    \s*          # zero or more white spaces
    [#$]         # one of '#' or '$'
    [a-z\d-]+    # one or more of: letters, digits, dash
)                # end of the group
+                # previous expression (the group) one or more times
$                # the end of the string
/                # regex delimiter
i                # ignore case (to let [a-z] match both lowercase and uppercase)

每组匹配一个标签和它前面的空格字符(如果有的话)。字符串锚点结尾 ($) 确保表达式仅在组位于字符串末尾时匹配。

【讨论】:

  • 太棒了。这非常有效,但由于某种原因,它不适用于以下示例:“出于某种原因,这不起作用#CFTC #bitcoin $btc $eth $ada”有什么想法吗?
  • @p_mcp 因为a-z 使用A-zA-Za-z,所以它不起作用。 regex101.com/r/xgzqyK/2
  • #CFTC 使用大写字母,regex 仅使用小写字母。您可以在第二个范围内的a-z 之后添加A-Z,也可以使用i flag (ignore case)
【解决方案2】:

以下内容:

/(^|\s)((#[a-z\d-]+)|(\$[a-z\d-]+))\s*$/

应该只在末尾匹配 - 查看末尾的\s*$,它匹配字符串的末尾,并接受标签后的尾随空格。如果末尾没有空格,您可以删除\s* 部分。

【讨论】:

  • 几乎可以工作,但这仅匹配最后一个现金标签/主题标签,而不是多个尾随标签
猜你喜欢
  • 1970-01-01
  • 2011-05-03
  • 2011-05-15
  • 2021-02-17
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2023-03-10
相关资源
最近更新 更多