使用Regex排除标签中的尾随点

时间:2015-04-02 16:34:59

标签: javascript regex

我正在尝试将文本中的主题标签转换为一些<a href="/tag/...">...</a>链接。

我尝试使用的代码是

text.replace(/#([^#\s@]+)/ig, "<a href='/tag/$1'>#$1</a>")

但是当测试文本如下所示时它失败

blah blah #example.

将匹配尾随点,结果链接将变为

blah blah <a href='/tag/example.'>#example.</a>

这不是我想要的结果。 有没有办法排除尾随点,但保持每个哈希标记之间的点?与blah blah #keep.the.dot.in.between #example2

一样

3 个答案:

答案 0 :(得分:2)

这是一个小提琴http://jsfiddle.net/quvhfky8/

text.replace(/#([^#\s@]*[^.\s])+/ig, "<a href='/tag/$1'>#$1</a>")

上面应该给你你想要的东西。

它会忽略“#hello”的尾随句号。但抓住“#hello.whatever”  它也会排除任何最终点,例如“#hello.whatever”。将抓住好像最后一点不在那里“#hello.whatever”

以下链接可向您展示:http://regexr.com/3ao8l Regexr是一个测试模式的好网站!

如果这不是您想要的,请发表评论,我会尽力满足您的需求。

答案 1 :(得分:1)

您可以使用:

'blah blah #this.is.example.'.replace(/#([^#\s@]*[^.])/g, "<a href='/tag/$1'>#$1</a>")
"blah blah <a href='/tag/this.is.an.exampl'>#this.is.example</a>."

答案 2 :(得分:0)

我认为您可以使用word boundary正则表达式为此案例利用#([^#\s@]+)(?=$|\b)锚点。另外,我宁愿使用"双引号(我更喜欢这种风格):

&#13;
&#13;
var re = /#([^#\s@]+)(?=$|\b)/g; 
var str = 'blah blah #example.  blah blah #keep.the.dot.in.between #example2';
var subst = '<a href="/tag/$1">#$1</a>';
var result = str.replace(re, subst);
document.getElementById("res").innerHTML = result;
&#13;
<div id="res"/>
&#13;
&#13;
&#13;