Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析字符串中的hashtags,锚标记除外_Javascript_Jquery_Regex_Hashtag - Fatal编程技术网

Javascript 解析字符串中的hashtags,锚标记除外

Javascript 解析字符串中的hashtags,锚标记除外,javascript,jquery,regex,hashtag,Javascript,Jquery,Regex,Hashtag,我想将给定字符串中的hashtag(#)的任何实例转换为HTML标记: 例如: #测试应转换为不应转换 #test应该变成#test #test应该变成#test 类似以下内容可能是一个开始(在vim中测试): 它将在#hashtag周围添加,直到第一个空格。这必须根据你的情况所需要的可能性进行调整。如果hashtags没有出现在html标记、单词字符(teste#teste不匹配)或双引号(用于属性)之后,那么它就是在匹配hashtags。您可能还需要添加单引号或其他可能性 这是一个很好的练

我想将给定字符串中的hashtag(
#
)的任何实例转换为HTML标记:

例如:

  • #测试
    应转换为
    不应转换
  • #test

    应该变成
    #test

  • #test
    应该变成
    #test

类似以下内容可能是一个开始(在vim中测试):

它将在#hashtag周围添加
,直到第一个空格。这必须根据你的情况所需要的可能性进行调整。如果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);