用于标签的正则表达式

时间:2015-11-26 12:44:32

标签: regex

我找到了很多正则表达式示例来从文本中检索主题标签。不幸的是,没有一个例子是我需要的。

这几乎是我所需要的......但

function hashtags(text) {
return text.replace(/(^|\s)#(\w*[a-zA-Z]+\w{2,50})/g, 
"$1<a href='/h/$2' target='_blank'>#$2</a>");
}

Hashtags不能以数字开头,以避免例如第12节被哈希处理的情况。

上面的示例检查它,但它不允许像ÁÉÍÚ这样的字符,它不能正确检查#标签长度,并且不允许字符' - '。

所以,我需要以下内容:

  1. 主题标签可以以任何字母开头--A,z,B,Ñ,ó,Ú等,但不能带有数字而不带特殊符号&amp;%$或 - _

    < / LI>
  2. 主题标签的总长度必须为3-50个字符。正则表达式必须只接受完整单词作为主题标签,但不能在前50个字符后删除它们。因此,必须忽略以#开头但包含超过50个字符的单词,而不是将前50个字符转换为主题标签链接。在我的示例中,{2,50}无效。

  3. 主题标签的其余部分(如果选中它不以数字或特殊符号开头)可能包含数字,任何字母和_ -符号。 \w仅允许_,但不允许-

  4. 有可能吗?

2 个答案:

答案 0 :(得分:0)

对于1 - 你需要一个角色类。您可以使用方括号定义它们。 PCRE定义IBDesignable,但也包括数字。

For 2 - 你可以有一个单词后跟'some whitespace'(PCRE:\w)或者使用环绕模式\s - 来表示'没有跟着它。

对于3 - 非空格可能是您想要的 - {PCR定义中的(?![A-Z0-9])

\S

Demo

编辑:鉴于这可能是javascript特定的,你不能使用lookbehind,那么以上可能不适合你。如果要将我们的正则表达式查询绑定到特定语言,则在问题中指定该约束很有用。

答案 1 :(得分:0)

试试这个:

/(^|\s)#([^\d&%$_-]\S{2,49})\b/g

解释

(^|\s)           #
#([^\d&%$_-]     # not the characters you mentioned in the first position
\S{2,49})        # the first chracter was already matched
\b               # a boundary to avoid overflow 50 characters

希望它有所帮助。