正则表达式剥离尾随cashtags / hashtags

时间:2018-02-06 16:20:56

标签: javascript regex

我想要一个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-]+))了 - 但是,这会删除任何位置中的所有cashtags或hashtags,并错误地删除非尾随标记。

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

2 个答案:

答案 0 :(得分:3)

您使用的using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace ConsoleTester { class Program { static void Main(string[] args) { var foo = new FooBar {CamelCaseProperty = "test", Foo = "test", Bar = "test" }; var output = JsonConvert.SerializeObject(foo); // output "CamelCaseProperty", "fOO", "BAR" var output2 = JsonConvert.SerializeObject(foo, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); // output "camelCaseProperty", "fOO", "bar" } } public class FooBar { public string CamelCaseProperty { get; set; } [JsonProperty("fOO")] public string Foo { get; set; } [JsonProperty("BAR")] public string Bar { get; set; } } } 并不包含有关匹配尾随标记的信息。

试试这个:

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) )的结尾确保表达式仅在组位于字符串末尾时才匹配。

答案 1 :(得分:1)

以下内容:

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

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