最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

为井号标签和字边界正则表达式

运维笔记admin16浏览0评论

为井号标签和字边界正则表达式

为井号标签和字边界正则表达式

我现在有一个匹配的世界的边界正则表达式

const trigger = 'foo1 foo2'
const rx = new RegExp(`\\b${trigger}\\b`, 'i');
return rx.test(text);

这符合以下情况:

foo1 foo2          <-- exact match
bar foo1 foo2      <-- end of sentence
foo1 foo2 bar      <-- beginning of sentence

并不是

barfoo1 foo2
foo1 foo2bar
barfoo1 foo2bar

这正是我想要的标准字符串的行为

然而,当trigger变得#foo,这不起作用,因为#是无效的单词边界。

正则表达式是由我的服务器控制,但触发器由用户控制。

这只是一个问题,如果字符串以哈希标签开始,所以像foo1 #foo2仍然有效。我总是可以去掉开头哈希标签。

如何让我的正则表达式支持这两个词和#标签?

回答如下:

而不是使用单词边界的可能,而不是使用(^|\s+)的左边界和($|\s+)的右边界:

const trigger = '#foo1';
text = 'hello #foo1 blah';
const rx = new RegExp(`(^|\\s+)${trigger}($|\\s+)`, 'i');
console.log(rx.test(text));

与图案\b#foo1\b的问题是,已经#是一个非字字符。所以\b不会对哈希符号前面的空间回暖。

发布评论

评论列表(0)

  1. 暂无评论