我试图在以#
开头的元素中获取任何字符串,以获得虚拟标记系统。基本上
#hello
#goodbye
#good afternoon
然后会显示为
hello
goodbye
good
这是我到目前为止的正则表达式
/#^\s/
我不是很擅长正则表达式,虽然我相信^\s
是我想要的文本直到空格。
示例HTML:
<div class="content">
<div>Hello everyone today we are going to be discussing #world_views , <br />
Please enjoy today's discussing by #user2
</div>
</div>
我希望它变成什么
<div class="content">
<div>Hello everyone today we are going to be discussing
<a href="/search&keywords=world%20views">#world_views</a> , <br />
Please enjoy today's discussing by <a href="/search&keywords=user2>#user2</a>
</div>
</div>
目前为止的完整JavaScript:
$(function() {
var i,forum={
phpbb2:'.postbody',
phpbb3:'.post .content',
punbb:'.entry-content',
invision:'.postbody'
},
yourVersion="phpbb3";
for (i=0;i<forum[yourVersion].length;i++){
$(forum[yourVersion][i]).html(function() {
return $(this)
.html()
.replace(
/#^\s/,
'<a href="/search&keywords='+$1.replace("#","")+'">$1</a>');
});
}
});
答案 0 :(得分:10)
你正在寻找“正则表达式”中的“任何不是空白字符,一次或多次”的东西,如下所示:
\S+
所以,对于你的正则表达式,它将是:
/#\S+/
您还可以考虑使用仅包含\S+
匹配的文本的捕获组,如下所示:
/#(\S+)/
现在捕获组#1将包含主题标签的文本,没有井号。
答案 1 :(得分:0)
在JavaScript中,您创建一个新的RegExp对象,然后对其进行测试。
这样的事情应该有效。
var string = $("#some_id").val();
var regexp = new RegExp("/#^\S+/");
if (regexp.test(string) === true) {
// do something here
return true; // optional
}
else {
// do something else here
return false; // optional
}
答案 2 :(得分:-2)
使用正则表达式的最佳方法是首先在正则表达式测试环境中测试它们,例如“http://www.solmetra.com/scripts/regex/index.php”。
以上示例'/#(\ S +)/'将为您提供以下结果: 总结:
preg_match_all('/#(\S+)/', '#hello #goodbye #good afternoon', $arr, PREG_PATTERN_ORDER);
函数返回
int(3)
结果集:
Array ( [0] => Array ( [0] => #hello [1] => #goodbye [2] => #good ) [1] => Array ( [0] => hello [1] => goodbye [2] => good ) )
我希望这会有所帮助。