我想要一个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,并错误地删除非尾随标记。
我如何改进这个正则表达式以保留那些不在最后的现金标签/主题标签?
答案 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*
部分。