繁体   English   中英

麻烦在正则表达式中使用string.replace

[英]trouble using string.replace with regex

给定这样的正则表达式:

http://rubular.com/r/ai1LFT5jvK

我想使用string.replace用我选择的字符串替换“ subdir”。

myStr.replace(/^.*\\/\\/.*\\.net\\/.*\\/(.*)\\/.*\\z/,otherStr)

仅返回相同的字符串,如下所示: http : //jsfiddle.net/nLmbV/

如果您查看Rublar,它似乎可以捕捉到我想要捕捉的东西,但是在Fiddle上,它并不能替代它。

我想知道为什么会这样,以及我在做什么错。 正确的正则表达式或replace调用的正确实现会很好,但是最重要的是,我想了解自己做错了什么,以便将来可以避免。

编辑

我更新了小提琴,将正则表达式从以下位置更改:

/^.*\/\/.*\.net\/.*\/(.*)\/.*\z/

 /^.*\/\/.*\.net\/.*\/(.*)\/.*$/

根据小提琴,它只是返回hello而不是https://xxxxxxxxxxx.cloudfront.net/dir/hello/Slide1_v2.PNG

正则表达式中只有那个\\z

您可能忘了用$符号代替它。 JavaScript使用^$作为锚点,而Ruby使用\\A\\z


回答您的编辑:

比赛总是被整体替换。 您需要将要替换零件的左侧和右侧都分组,然后将其重新插入替换中:

url.replace(/^(.*\/\/.*\.net\/.*\/).*(\/.*)$/,"$1hello$2")

在我被打倒之前,我知道问题要问正则表达式。 如果不编写极其复​​杂的正则表达式,使用正则表达式几乎不可能可靠地处理此答案URL的原因。 可以做到,但是会伤到你的头! 如果在浏览器中执行此操作,则可以在脚本中使用A标记,以简化操作。 A标签知道如何将它们解析为小块,它使您可以独立地修改小块,因此您只需要处理路径名:

//make a temporary a tag
var a = document.createElement('a');
//set the href property to the url you want to process
a.href = "scheme://host.domain/path/to/the/file?querystring"
//grab the path part of the url, and chop up into an array of directories
var dirs = a.pathname.split('/');
//set 2nd dir name - array is ['','path','to','file']
dirs[2]='hello';
//put the path back together
a.pathname = dirs.join('/');

a.href现在包含所需的URL。 当您回来以后更改代码时,会保留更多的行,但还会留下更多的头发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM