求一个匹配hash的正则
发布于 7 年前 作者 romboo 4130 次浏览 最后一次编辑是 4 年前

示例:#hello world# 匹配##之间的内容,如果没有#结尾,则匹配#与空格之间的。例如: #hello world#,则提取hellow world,但如果是:#hello world,则提取hello,英文空格真讨厌。

我目前想到的是笨方法,/(#(.+?)#)|(#(.+)\s)/

9 回复

re = /#(.*)[\s#]/

javascript 没有反向预查找,/\#\w+(?=\#\s)/再用replace(/^\#/)把首个#替换掉

但如果是#hello world##,匹配的结果是 hello world#,但实际上要的是hello world /#(.*)[\s#]/.test(’#hello world again again’),结果匹配的是hello world again,应该是匹配hello

反向可以用XRegExp,但感觉你这个反而复杂了

(?:#(.+)#)|(?:#([^\s]+)) 试试吧 似乎你说的好像都可以.

谢,不过如果有两个##的话,还是不对

/(?:#(.+)#)|(?:#([^\s]+))/.test("#hello world##") console.log(RegExp.$1)

理想结果是匹配 hello world,但实际上是匹配 hello world#

@romboo #((?:([^#]+?)#)|(?:([^#\s]+))) 哈哈 那你再试试这个.

/#(.+?(?=#)|\S+)/

/(?:#(\w+(?:(?=\s+\w+\#)|(?=\#))))/ 只能做到这一步了: 1.matches集的第二个才是提取的字母 2.不支持全局匹配,即是只支持单条匹配

回到顶部