1

我有一个 varshowNo是目录开头的输入。

例子:var showNo = "101B"

之后showNo是其他部门设置的网络上包含空格和其他垃圾的字符。

例子:/101B A Trip to the Beach/

我需要在这个里面使用子目录:

例子:/101B A Trip to the Beach/assets/tools/

有没有办法使用正则表达式和变量来避免扫描所有目录并尝试匹配前 4 个字符的子字符串?

4

1 回答 1

2
var directory = str.match(/\/101B[^\/]+\//)[0];

将匹配以您的变量开头的第一个目录名称。

更重要的是,这个想法如下:

  1. 匹配以目录斜杠开头的前四个字符串文字。

  2. 然后匹配任何不是目录斜杠的字符。“不是”由 ^ 表示。

  3. 然后再重复 2 次 0 次或更多次。

  4. 最后匹配目录斜线。

我怀疑您在使用“任何不是”字符类时遇到了麻烦。它有时很棘手,但一旦你得到它,它就是一个非常有用的捷径。

- 编辑 -

实际上,在重新阅读时,我怀疑您在使用正则表达式中的变量时遇到了麻烦,对吗?一旦您知道如何操作,这也很容易。

您可以先将其构造为字符串:

var regex_string = "/" + showNo + "[^/]+/";

然后将其“编译”成一个您可以正常使用的正则表达式:

var regex_dir = RegExp(regex_string);

var directory = str.match(regex_dir);

希望这可以帮助!

于 2013-01-27T05:06:09.953 回答