首页 > 解决方案 > 正则表达式以匹配从左到右和从右到左语言的主题标签

问题描述

我使用以下代码查找以主题标签开头的单词:

var regex = /(?:^|\W)#(\w+)(?!\w)/g;

但它只匹配英文单词,不能匹配其他语言的标签,如阿拉伯语。那么,如何在这样的文本中找到主题标签:

这是一个简单的#text
هذا #نص بسیط

标签: javascriptjqueryregex

解决方案


如果 # 之后的值不应包含 # 本身,则可以使用[^\s#]与任何字符匹配的否定字符类,但#使用交替的任何一种方式除外 |

该值在捕获组 1 中。

(?:^|\s)(#[^\s#]+|[^\s#]+#)(?=$|\s)

正则表达式演示

const pattern = /(?:^|\s)(#[^\s#]+|[^\s#]+#)(?=$|\s)/;
[
  "this is a simple #test1",
  "هذا #نص بسیط",
  "test #test2#",
  "test #test3#test3",
  "test ##test4",
  "test test5##",
].forEach(s => {
  const m = s.match(pattern);
  if (m) console.log(m[1]);
});


推荐阅读