有一个字符串(URL路径),例如:/this/is/some/url
我想删除第一次出现的/
,并将第二个正斜杠之后的字符串(在示例中为some
)更改为另一个字符串,比如is
。结果应该是this/is/a/url
,这是我得到的:
let myUrl = '/this/is/some/url';
let splitUrl = myUrl.split('/').filter(v => v !== '');
splitUrl[2] = 'a';
let newUrl = splitUrl.join('/');
console.log(newUrl); // this/is/a/url
字符串
但是现在我想把它变成一个RegEx,所以我想出了这个:
const myUrl = '/this/is/some/url';
const modifiedUrl = myUrl.replace(/[a-zA-Z0-9]/, 'a').replace(/^\//, '');
console.log(modifiedUrl); // ahis/is/some/url
型
但结果不是我想要的,因为它输出:ahis/is/some/url
。我承认我不太擅长使用RegEx。
一些SO帖子here和here对我没有帮助,因为我仍然不知道如何只替换第二个正斜杠之后的内容。
能帮我吗
2条答案
按热度按时间46qrfjad1#
您可以使用
字符串
请参阅this regex demo。* 详细信息 *:
\/
-一个/
字符((?:[^\/]*\/){2})
-第1组:除了/
+一个/
字符以外的任何零个或多个字符的两次出现[^\/]*
-除了/
之外的零个或多个字符。替换是对Group 1值的反向引用+将插入到结果字符串中的新字符串。
要替换下一个URL子部分,只需将
\/[^\/]*
添加到正则表达式模式中:型
主要思想保持不变:捕获要替换的文本之前的文本,然后只匹配需要替换的文本,并且-在替换中-使用对捕获的文本的反向引用,并追加要替换的文本。
注意:如果你的替换文本包含一个文字
$
,后面跟着一个数字,你实际上不想把它当作一个反向引用,而是作为一个文字,你应该把.replace(/\$/g, '$$$$')
添加到上面代码中的每个变量str1
和str2
。vql8enpb2#
我会选择一种将任务一分为二的方法
/^\//
...然后...xxx/yyy/
形式的两个后续路径段的序列为目标。优势在于能够处理两种路径变体,即带前导斜杠的路径变体和不带前导斜杠的路径变体。
个字符
在组合/合并两个正则表达式模式的情况下,也有利于不必使用正向后看(though every relevant browser meanwhile does support this feature),正则表达式然后变得更复杂,因此更难以读取。
/^\/*((?:[^/]+\/){2})[^/]+/
的函数。的字符串