CNode

求一个匹配hash的正则

Rromboo发布于13 年前最后回复13 年前9 回复6802 浏览0 收藏

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

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

查看回复

回复 (9)

W
we2code#1·13 年前

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

G
guankaishe#2·13 年前

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

R
romboo#3·13 年前
引用 we2codere = / (. )[\s ]/

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

R
romboo#4·13 年前
V
viowan#5·13 年前

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

R
romboo#6·13 年前
引用 viowan(?: (.+) )|(?: ([^\s]+)) 试试吧 似乎你说的好像都可以.

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

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

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

V
viowan#7·13 年前
引用 viowan(?: (.+) )|(?: ([^\s]+)) 试试吧 似乎你说的好像都可以.

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

J
jiangmiao#8·13 年前

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

G
guankaishe#9·13 年前

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

参与回复
登录后即可参与回复。登录