1

我试图在一个元素中获取任何字符串,以启动#一个虚拟标签系统。基本上

#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>');
    });
   }
 });
4

3 回答 3

11

您正在寻找“任何不是空白字符的东西,一次或多次”,在正则表达式中,看起来像:

\S+

因此,对于您的正则表达式,它将是:

/#\S+/

您还可以考虑使用仅包含\S+匹配文本的捕获组,如下所示:

/#(\S+)/

现在捕获组 #1 将包含主题标签的文本,没有井号。

于 2013-07-06T00:31:40.577 回答
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
}
于 2013-07-06T00:35:54.163 回答
-1

使用正则表达式的最佳方法是首先在正则表达式测试环境中测试它们,例如“ http://www.solmetra.com/scripts/regex/index.php ”。

上面的例子 '/#(\S+)/' 会给你以下结果: 摘要:

  preg_match_all('/#(\S+)/', '#hello #goodbye #下午好', $arr, PREG_PATTERN_ORDER);

返回的函数

  整数(3)

结果集:

大批
(
    [0] => 数组
        (
            [0] => #你好
            [1] => #再见
            [2] => #好
        )
    [1] => 数组
        (
            [0] => 你好
            [1] => 再见
            [2] => 好
        )
)

我希望这有帮助。

于 2013-07-06T07:59:07.443 回答