Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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/4/regex/17.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 正则表达式匹配路径,如/^String1(任何内容)(String2或String3)/_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式匹配路径,如/^String1(任何内容)(String2或String3)/

Javascript 正则表达式匹配路径,如/^String1(任何内容)(String2或String3)/,javascript,regex,Javascript,Regex,例如: String1: Books>Programming> String2: Databases> String3: Languages> Anything: '' 由以下正则表达式匹配: /^Books>Programming>(Databases>|Languages>)/ 现在,假设任何东西都不是空的,例如“whatever1>”,正则表达式应该如何更改 我试过了,但运气不好,我可能错过了一些明显的东西。如果我正确地找到了你,你想匹配

例如:

String1: Books>Programming>
String2: Databases>
String3: Languages>
Anything: ''
由以下正则表达式匹配:

/^Books>Programming>(Databases>|Languages>)/
现在,假设任何东西都不是空的,例如“whatever1>”,正则表达式应该如何更改


我试过了,但运气不好,我可能错过了一些明显的东西。

如果我正确地找到了你,你想匹配路径,比如书籍>编程>[任何东西]>(数据库>语言>)。如果是这样,你可以这样做

let String1 = "Books>Programming>",  
    String2 = "Databases>",
    String3 = "Languages>"

let regex = new RegExp(`${String1}(.*?)>(?:${String2}|${String3})`)
这种方法的好处是,您可以随意修改变量,并在执行代码时创建修改过的正则表达式,这样就不会硬编码

现在,如果要测试字符串是否与此模式匹配,可以使用:

regex.test("Books>Programming>whatever1>Databases>")
如果您想从中提取任何内容,只需使用:

"Books>Programming>abc>Databases>".match(regex)[1]
您可以使用来实现这一点,而无需使用正则表达式。像这样:

函数getParts(str){ var parts=str.split(“>”;//按“>”拆分字符串 if(!parts[parts.length-1].length)//如果最后一个部分为空 parts.pop();//删除它 return parts;//返回部件数组(默认按顺序排列) }
log(getParts(“某物>书籍>另一物>编程>”)使用否定字符类-
[^>]*
,请参见该操作,除非它与既不存在String2也不存在String3的情况相匹配。可能描述中不清楚,但必须至少有两个中的一个,即
Books>Programming>whatever1>
不能匹配。@SC1000您测试过代码吗?因为它正按照您的预期工作。:/我没有看到这个错误。谢谢你的链接,我不得不在mongoDB中测试它,一开始它似乎没有按预期工作。接受您的回答,谢谢。谢谢,我必须坚持使用正则表达式(因为mongoDB查询也需要使用正则表达式)