解析字符串中的hashtag(锚标记除外)
Parse hashtags in a string, except for anchor tags
我想将给定字符串中的标签(#
)的任何实例转换为HTML标签:
-
#test
应转化为<a>#test</a>
-
test#test
不应转换 -
<a href="#test">#test</a>
不应该转换 -
<p>#test</p>
变为<p><a>#test</a></p>
-
<b>#test</b>
变为<b><a>#test</a></b>
可以这样开始(在vim中测试):
:% subst :<[^>|a>]'+>'zs'(#[^<]'+')'ze:<a>'1</a>:
它会满足你最后三个要求。
至于前两个,我想它们太宽泛了,特别是因为test#test
。我现在在工作,不能在这上面花太多时间。
编辑:这个正则表达式匹配前两个要求:
%s:'('w'|<[^>]'+>'|"')'@<!'(#[^ ]'+'):<a>'2<'/a>:
它将在#hashtag周围添加<a>
直到第一个空白。这需要根据你的情况进行调整。当#hashtag没有出现在html标签,单词字符(teste#teste不匹配)或双引号(属性)之后时,它将匹配#hashtag。你也可以添加单引号或其他可能性。
这是一个很好的练习(在午餐时间…),但一定要遵循人们在评论中给你的建议。
正则表达式需要
(<['w]+>#test<'/['w]+>)|^(#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>')
})
<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>
尽管有关于使用正则表达式解析html的所有免责声明,但有一个简单的方法可以做到这一点。
这个问题是本问题中解释的"regex匹配模式,不包括…"技术的经典案例。
我们可以用一个非常简单的正则表达式来解决它:
'w#test|<a.*?</a>|(#test)
在不需要的上下文中,|
的所有左侧都匹配完整的#test
。我们将忽略这些匹配。右边匹配并捕获#test
到组1,我们知道它们是正确的,因为它们没有被左边的表达式匹配。
这个程序展示了如何使用正则表达式。请注意,我将演示中的替换为[a]
而不是<a>
,因此结果在浏览器中可见。查看在线演示的右窗格中的结果):
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);
参考- 如何匹配(或替换)模式,除了s1, s2, s3…
- 关于匹配模式的文章,除非…
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 本地存储中的字符串到字节数组转换
- 如何在AngularJS URL中的hashtag(#)前面加上字符串
- 解析字符串中的hashtag(锚标记除外)
- 字符串中的Hashtag会破坏JavaScript
- 对于使用regex以hashtag开头的字符串返回true