我有一个var showNo
,它是目录开头的输入。
示例:var showNo = "101B"
showNo
之后的字符包含由其他部门设置的网络上设置的空格和其他垃圾。
示例:/101B A Trip to the Beach/
我需要在这个内部使用子目录:
示例:/101B A Trip to the Beach/assets/tools/
有没有办法使用正则表达式和变量来避免扫描所有目录并尝试匹配前4个字符的子字符串?
答案 0 :(得分:2)
var directory = str.match(/\/101B[^\/]+\//)[0];
将匹配以您变量开头的第一个目录名称。
更重要的是,这个想法如下:
匹配以目录斜杠开头的前四个字符串文字。
然后匹配任何不是目录斜杠的字符。 “不是”由^。
然后再重复2次0次或以上。
最后匹配目录斜杠。
我怀疑你遇到了“任何不是”字符类的问题。它有时是棘手的,但一旦你得到它,这是一个非常有用的捷径。
- 编辑 -
实际上在重读时我怀疑你在正则表达式中使用变量时遇到了麻烦,对吗? 一旦你知道如何,这也很容易。
您可以先将其构建为字符串:
var regex_string = "/" + showNo + "[^/]+/";
然后将其“编译”为正常使用的正则表达式:
var regex_dir = RegExp(regex_string);
var directory = str.match(regex_dir);
希望这有帮助!