Javascript 解析字符串中的hashtags,锚标记除外
我想将给定字符串中的hashtag(Javascript 解析字符串中的hashtags,锚标记除外,javascript,jquery,regex,hashtag,Javascript,Jquery,Regex,Hashtag,我想将给定字符串中的hashtag(#)的任何实例转换为HTML标记: 例如: #测试应转换为不应转换 #test应该变成#test #test应该变成#test 类似以下内容可能是一个开始(在vim中测试): 它将在#hashtag周围添加,直到第一个空格。这必须根据你的情况所需要的可能性进行调整。如果hashtags没有出现在html标记、单词字符(teste#teste不匹配)或双引号(用于属性)之后,那么它就是在匹配hashtags。您可能还需要添加单引号或其他可能性 这是一个很好的练
#
)的任何实例转换为HTML标记:
例如:
应转换为#测试
不应转换
应该变成#test
#test
应该变成#test
#test
,直到第一个空格。这必须根据你的情况所需要的可能性进行调整。如果hashtags没有出现在html标记、单词字符(teste#teste不匹配)或双引号(用于属性)之后,那么它就是在匹配hashtags。您可能还需要添加单引号或其他可能性
这是一个很好的练习(在午餐时间…),但一定要遵循人们在评论中给你的建议。你需要的正则表达式是
(#test)^(#test)|(\s#test)|(\s#test$)
代码
var str = '#test test#test #test har #test <a href="#test">#test</a> <p>#test</p> <b>#test</b> <pre>#test</pre> #test char #test'
//str.match(/(<[\w]+>#test<\/[\w]+>)|^(#test)|(\s#test)|(\s#test$)/g)
//["#test", " #test", " #test", "<p>#test</p>", "<b>#test</b>", "<pre>#test</pre>", " #test", " #test"]
str.replace(/(<[\w]+>#test<\/[\w]+>)|^(#test)|(\s#test)|(\s#test$)/g, function($1) {
return $1.replace('#test','<a>#test</a>')
})
var str='#测试测试#测试#测试har#测试#测试#测试#测试#测试字符#测试'
//str.match(/(#test)^(#test)|(\s#test)|(\s#test$)/g)
//[“#测试”、“#测试”、“#测试”、“测试”、“#测试”、“#测试”、“#测试”、“#测试”、“#测试”]
str.replace(/(#test)^(#test)|(\s#test)|(\s#test$)/g,函数($1){
返回$1。替换(“#test”,“#test#test#test#test char#test
关于使用正则表达式解析html的所有免责声明,有一种简单的方法可以做到这一点
这个问题是本问题中解释的技术的一个经典案例
我们可以用一个非常简单的正则表达式来解决这个问题:
参考
#
前面的字符。看起来你还没有尝试提示:^
是字符串的开头,[^>]
是!='>'>'。规则1:不要使用正则表达式解析HTML。规则2:如果你仍然想用正则表达式解析HTML,请参阅规则1。
%s:\(\w\|<[^>]\+>\|"\)\@<!\(#[^ ]\+\):<a>\2<\/a>:
var str = '#test test#test #test har #test <a href="#test">#test</a> <p>#test</p> <b>#test</b> <pre>#test</pre> #test char #test'
//str.match(/(<[\w]+>#test<\/[\w]+>)|^(#test)|(\s#test)|(\s#test$)/g)
//["#test", " #test", " #test", "<p>#test</p>", "<b>#test</b>", "<pre>#test</pre>", " #test", " #test"]
str.replace(/(<[\w]+>#test<\/[\w]+>)|^(#test)|(\s#test)|(\s#test$)/g, function($1) {
return $1.replace('#test','<a>#test</a>')
})
<a>#test</a> test#test <a>#test</a> har <a>#test</a> <a href="#test">#test</a> <p><a>#test</a></p> <b><a>#test</a></b> <pre><a>#test</a></pre> <a>#test</a> char <a>#test</a>
\w#test|<a.*?</a>|(#test)
var subject = ' yesSingle #test no test#test no <a href="#test">#test</a> yesParagraph <p>#test</p> yesBold <b>#test</b>';
var regex = /\w#test|<a.*?<\/a>|(#test)/g;
replaced = subject.replace(regex, function(m, group1) {
if (group1 == "" ) return m;
else return "[a]" + group1 + "[/a]";
});
document.write(replaced);