我使用下面的函数来链接用户名:
function linkifyUsernames(text){
return text.replace(/@\b([0-9a-z-]{2,49})\b/ig,
"<a href='/profile/$1' target='_blank'>@$1</a>");
}
上面的功能运行正常,但唯一的问题是它会破坏单词。例如,
@abcdéíú
该功能链接单词的第一部分
demo page EIU
但是我需要一个不转换为链接的函数链接任何以@开头但包含除a-z0-9-之外的其他字符的单词。因此, @abcdéíú一词必须保持不变。
由于某些原因,单词键盘无济于事。
答案 0 :(得分:1)
这不在[0-9a-z]
范围之间,尝试此范围[a-z\u00E0-\u00FC]
,如下例所示:
https://regex101.com/r/vW2mR9/1
答案 1 :(得分:0)
function linkifyUsernames(text) {
var pattern = /^(@)(\w{2,12})/ig;
if(text.match(pattern).length>0 && text.match(pattern)[0]=== text)
return text.replace(pattern, "<a href='/profile/$2' target='_blank'>@$2</a>");
else return text;
}
$('div').append(linkifyUsernames('@abcd'))
$('div').append('<br/>')
$('div').append(linkifyUsernames('@abcdéáú'))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div>
</div>
a-z
不会涵盖à,é等特殊字符。
您可以使用\w
表示法进行简化,例如:
/ ^(@)(\ W {2,12})/ IG
答案 2 :(得分:0)
如上所述:http://www.regular-expressions.info/wordboundaries.html
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
如果您尝试使用示例字符串
@abcdéíú
仅使用\w
来匹配任何单词字符,您会看到déíú
不是正则表达字中的单词字符。因此,即使您使用前一个答案中的[a-z\u00E0-\u00FC]
,正则表达式也因\b
而失败。