19

自从我开始写这个问题以来,我想我已经找到了我遇到的每个问题的答案,但我想我还是会发布,因为它可能对其他人有用并且更多的澄清可能会有所帮助。

我试图将正则表达式与 javascript 函数拆分一起使用。由于某种原因,即使在我调用 match 时它找到了匹配项,它也没有拆分字符串。我最初认为问题出在我的正则表达式中使用前瞻。这是一个简化的示例:

不起作用:

"aaaaBaaaa".split("(?=B).");

作品:

"aaaaBaaaa".match("(?=B).");

看来问题是在拆分示例中,传递的字符串没有被解释为正则表达式。使用正斜杠而不是引号似乎可以解决问题。

"aaaaBaaaa".split(/(?=B)./);

我用下面这个看起来很傻的例子证实了我的理论:

"aaaaaaaa(?=B).aaaaaaa".split("(?=B).");

有没有人认为 match 函数假设你有一个正则表达式而 split 函数没有这很奇怪?

4

2 回答 2

31

String.split接受字符串或正则表达式作为其第一个参数。该String.match方法只接受一个正则表达式。

我想这String.match将尝试处理通过的任何内容;因此,如果您传递一个字符串,它会将其解释为正则表达式。该String.split方法没有这样做的奢侈,因为它可以接受正则表达式和字符串;在这种情况下,事后猜测是愚蠢的。


编辑:(来自:“JavaScript:权威指南”)

String.match需要使用正则表达式。传递的参数需要是一个RegExp指定要匹配的模式的对象。如果此参数不是 a RegExp,则首先通过将其传递给RegExp()构造函数将其转换为 1。

于 2009-05-01T16:58:56.887 回答
3

如果我没记错的话(我在这里可能是非常错误的),split 方法是在正则表达式引擎被广泛使用之前在 javascript 中实现的,所以它可能是为了向后兼容。

于 2009-05-01T16:43:56.830 回答