我有一个正则表达式可列出输入到我的应用程序中的搜索中的主题标签,如下所示:
Cat
和一个正则表达式可以列出搜索中的所有单词
text.match(/#[a-z]+/gi);
我想要做的是将#标签和单词分成两个单独的列表,因此我希望能够更新第二个regex表达式,以便它忽略#标签。我将如何实现?
例如,如果输入为:
text.match(/\S+\s*/g);
预期输出应为2个数组:
"Hello this is #my #question for today"
如果可能的话,我还想使主题标签正则表达式返回不包含主题标签的单词,否则,我可以稍后在数组中对单词进行字符串拆分
答案 0 :(得分:1)
您可以同时使用负向和正向回望。显然,否定的lookbehinds将匹配没有您的“哈希标签”的作品,而肯定的将与包含它们的那些匹配。
/\b(?<!#)[^#\s]+/g
\b
确保您正在看一个单词的开头(?<!)
是令人反感的。禁止匹配#
/(?<=#)\w+/g
(?<=)
是正向查找,如果在#
之后发现\w+
,则允许匹配
答案 1 :(得分:0)
您可以简单地分割space
个字符,然后检查单词是否以#
开头或不使用此正则表达式
`/^#.+/`
上面的正则表达式带有匹配符#
,后跟至少一个字符,如果您还想匹配单个#
,那么只需使用startsWith
/^#.+/.test(inp) ---> inp.startsWith('#')
let str = `Hello this is #my #question for today`
let {withHash,withOutHash} = str.split(/\s+/).reduce((op,inp)=>{
let hash = /^#.+/.test(inp)
let key = hash ? 'withHash' : 'withOutHash'
op[key] = op[key] || []
op[key].push(inp)
return op
},{})
console.log(withHash)
console.log(withOutHash)