javascript - 正则表达式以匹配从左到右和从右到左语言的主题标签
问题描述
我使用以下代码查找以主题标签开头的单词:
var regex = /(?:^|\W)#(\w+)(?!\w)/g;
但它只匹配英文单词,不能匹配其他语言的标签,如阿拉伯语。那么,如何在这样的文本中找到主题标签:
这是一个简单的#text
هذا #نص بسیط
解决方案
如果 # 之后的值不应包含 # 本身,则可以使用[^\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]);
});
推荐阅读
- reactjs - material-ui 自动完成接受自定义值
- c++11 - 不知道如何反映 oneof 归档
- googletest - 如何在谷歌测试中使用 QAbstractItemModelTester?
- javascript - 工作流程如何将一个子模块 typescript 写成一个非 typescript 模块?
- c++ - 使用表达式-SFINAE 的函数模板的类定义
- java - 如何通过带有@annotation 的 Open Api 3.0 描述我的对象的模式?
- c - 使用命令行参数时出现分段错误
- c# - Xamarin Forms 宽度按预期表现
- perl - Wxperl 创建小部件但不放置它
- javascript - 如果行被Google表格中的过滤器隐藏或未隐藏,如何获取最后一个可见行?