Javascript不会使用正则表达式进行拆分
-
03-07-2019 - |
题
自从我开始写这个问题以来,我想我已经找到了每个问题的答案,但我认为无论如何我都会发帖,因为它可能对其他人有用,更多的澄清可能会有所帮助。
我试图使用带有ja函数拆分的前瞻的正则表达式。由于某种原因,即使在我调用匹配时找到匹配项,它也不会拆分字符串。我原本以为问题来自于我的正则表达式中使用前瞻。这是一个简化的例子:
不起作用:
"aaaaBaaaa".split("(?=B).");
使用:
"aaaaBaaaa".match("(?=B).");
看来问题是在拆分示例中,传递的字符串未被解释为正则表达式。使用正斜杠而不是引号似乎可以解决问题。
"aaaaBaaaa".split(/(?=B)./);
我用以下愚蠢的例子证实了我的理论:
"aaaaaaaa(?=B).aaaaaaa".split("(?=B).");
有没有其他人认为匹配函数假定你有一个正则表达式,而split函数没有?这是奇怪的吗?
解决方案
String.split
接受字符串或正则表达式作为其第一个参数。 String.match
方法只接受正则表达式。
我想, String.match
会尝试使用传递的内容;因此,如果您传递一个字符串,它会将其解释为正则表达式。 String.split
方法无法做到这一点,因为它可以接受正则表达式AND字符串;在这种情况下,进行二次猜测是愚蠢的。
修改 :(来自:“JavaScript:The Definitive Guide”)
String.match
需要使用正则表达式。传递的参数需要是 RegExp
对象,该对象指定要匹配的模式。如果此参数不是 RegExp
,则首先将其转换为 RegExp()
构造函数。
其他提示
如果我没记错的话(我在这里可能会非常错误),在正则规则引擎广泛使用之前,分割方法是在javascript中实现的,因此它可能是为了向后兼容。
不隶属于 StackOverflow