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查询也需要使用正则表达式)