正则表达式与非捕获hashbangs

时间:2014-11-30 08:32:40

标签: regex

我正在尝试编写一个正则表达式来解析URL的哈希部分,删除可能存在的任何传统格式的哈希部分。

例如,我希望删除以下任何内容:

#
#/
#!
#!/

这就是我目前所拥有的:

/[(?:#|#\/|#!|#!\/)]+/

但是,这是在开始时捕获一个空组,并拆分剩余的字符串。例如,

"#!/E/F".split(/[(?:#|#\/|#!|#!\/)]/);    //  ["", "", "", "E", "F"]

而理想的结果只是一个单一的

["E/F"]

有人可以指出我的正则表达式中的错误吗?

[如果它有所不同,我使用Firebug中的JavaScript控制台生成了上述输出。]

3 个答案:

答案 0 :(得分:3)

使用string.replace代替string.split

#!?\/?

使用上面的正则表达式,然后用空字符串替换匹配。

> '#!/E/F'.replace(/#!?\/?/g, '');
'E/F'

DEMO

答案 1 :(得分:1)

你的正则表达式看起来非常复杂。也许这更像是你在寻找的东西: “#/ E / F!” .split(/(#/ |#/ |#|#)/!);

您是否结帐了Javascript regex documentation

它可能与您想象的不同,因为我不明白为什么您使用的是:和?在你的正则表达式。

答案 2 :(得分:0)

如果你使用的是Javascript,那么你可以使用:

location.assign(location.href.replace(/#.*$/, ""));

但是,如果您只想删除上面列出的主题标签,请使用:

var repl = location.href.replace(/#(!\/?|\/)?$/, '');