Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在寻找一个正则表达式来替换我的字符串_Javascript_Regex - Fatal编程技术网

Javascript 正在寻找一个正则表达式来替换我的字符串

Javascript 正在寻找一个正则表达式来替换我的字符串,javascript,regex,Javascript,Regex,我对正则表达式有问题,需要一些帮助。 当前我有url类型 /search/:year/:month/:day/xxxx和:month可能存在或不存在。现在我需要用空字符串替换我url上的/search/:year/:month/:daypaten。意思是获取url部分的剩余部分。下面是一个例子 1.“/search/2017/02/03/category/gun'=>”/category/gun' 2.“/search/2017/02/03/”=>“/” 3.“/search/2017/01/c

我对正则表达式有问题,需要一些帮助。 当前我有url类型
/search/:year/:month/:day/xxxx
:month
可能存在或不存在。现在我需要用空字符串替换我url上的
/search/:year/:month/:day
paten。意思是获取url部分的剩余部分。下面是一个例子

1.“/search/2017/02/03/category/gun'=>”/category/gun'

2.“/search/2017/02/03/”=>“/”

3.“/search/2017/01/category/gun'=>”/category/gun/'

4.“/search/2017/category/gun/”=>“/category/gun/”

5.'/search/2018/?类别=枪和类型%5B%5D=sendo'=>'/?类别=枪和类型%5B%5D=sendo/'

我尝试使用regex=
/^\/search\/((?:\d{4}))(?:\/(?:\d[012]| 0[1-9]))(?:\/(?:[0-3]\d])/

但对于案例
/search/2017/category/gun/

const regex = /^\/search\/((?:\d{4}))(?:\/((?:\d|1[012]|0[1-9])))?(?:\/((?:[0-3]\d)))/
const testLink = [
  '/search/2017/02/03/category/gun/',
  '/search/2017/01/category/gun/',
  '/search/2017/category/gun/',
  '/search/2017/02/03/category/gun/',
  '/search/2018/?category=gun&type%5B%5D=sendo'

]

testLink.forEach((value, i) => {
  console.log(value.replace(regex, ''))
  console.log('-------------------')
})

使用此正则表达式模式
(\/search\/.*\d+(=\/)

const regex=/(\/search\/.*\d+(=\/)/g;
常量testLink=[
“/search/2017/02/03/category/gun/”,
“/search/2017/01/category/gun/”,
“/search/2017/”,
“/search/2017/02/03/category/gun/”,
“/search/2018/?类别=枪和类型%5B%5D=sendo”
]
testLink.forEach((值,i)=>{
console.log(value.replace(regex.))
console.log('-----------------------')

})
以下模式的拆分似乎有效:

\d{4}(?:/\d{2})*    
这将把您想要的目标作为分割数组中的第二个元素,第一部分位于路径的年份数字部分之前

input='/search/2017/02/03/category/gun';
parts=input.split(/\d{4}(?:\/\d{2})*/);
控制台日志(第[1]部分);
log('/search/2017/02/03'.split(/\d{4}(?:\/\d{2})*/)[1]);
console.log('/search/2017/01/category/gun'.split(/\d{4}(?:\/\d{2})*/)[1]);
console.log('/search/2017/category/gun/'.split(/\d{4}(?:\/\d{2})*/)[1])这里有一种方法:

strings = [
    '/search/2017/02/03/category/gun',
    '/search/2017/02/03/',
    '/search/2017/01/category/gun',
    '/search/2017/category/gun/',
]; for (var i = 0; i < strings.length; i++) {
    alert(strings[i].replace(/\/search\/[0-9\/]+(\/)(category\/[^\/$]+)?.*/,'$1$2'));
}
字符串=[
“/search/2017/02/03/category/gun”,
“/search/2017/02/03/”,
“/search/2017/01/category/gun”,
“/search/2017/category/gun/”,
]; for(var i=0;i
您可以使用相同的正则表达式,但可以颠倒此部分的顺序
(?:\d|1[012]|0[1-9])
如下
(?:\d | 1[012]| 0[1-9])
并将最后一组设置为可选,如下
(?:[0-3]\d))?

输出

/类别/枪械/ /类别/枪械/ /类别/枪械/ /类别/枪械/
如果您确定日期格式,那么您可以将exp简化为
^\/search\/\d{4}(?:\/\d{1,2}){0,2}

第三个输出以斜杠(/)结尾,而第四个输出则不以斜杠(/)结尾。有什么原因吗?@KrishnaPrashatt我刚刚更新了我的问题。所以请帮帮我。对不起,我刚刚更新了我的问题,您的代码不适用于我的案例
/search/2018/?category=gun&type%5B%5D=sendo
它失败了,除了
/?category=gun&type%5B%5D=sendo
之外的其他案例是正确的对不起。现在检查这个新的一个,谢谢。我认为你的正则表达式对我来说没问题。谢谢你的评论,但我正在寻找一个正则表达式来解决所有的案例。你能解释一下我的答案有什么错吗?案例/搜索/2018/?性别=1&用户年龄=37&类别=枪和类型似乎失败了=tomoko@Bình Trương它解决了我写它时出现的所有案例。“我不太愿意经常为你复习。”蒂姆·比格莱森说,“如果你有答案的话,我与之无关。”。如果你想帮我一个忙,我可以稍后再查,但到时可能会有人通知你。谢谢你对我的支持。这似乎是另一个好答案。
const regex = /^\/search\/((?:\d{4}))(?:\/((?:0[1-9]|1[012]|\d)))?(?:\/((?:[0-3]\d)))?/
const testLink = [
  '/search/2017/02/03/category/gun/',
  '/search/2017/01/category/gun/',
  '/search/2017/category/gun/',
  '/search/2017/02/03/category/gun/'
]