正则表达式:.exec()函数不返回预期的输出

时间:2015-10-28 01:57:47

标签: javascript regex

这不会返回我或regex101所期望的内容:

var myString = "Accel World|http://www.anime-planet.com/anime/accel-worldAh! My Goddess|http://www.anime-planet.com/anime/ah-my-goddess";
var reg = /[^|]*/g;
var regResponse = reg.exec(myString);
console.log(regResponse);

根据regex101,这应该匹配除“|”之外的所有内容然后返回它只匹配第一个字符串Accel World,而不是“|”之外的所有字符串。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

Exec一次只会返回一个结果(后续调用将返回其余结果,但您还需要使用+代替*

您可以使用myString.match(reg) htough一次性获得所有结果。

var myString = "Accel World|http://www.anime-planet.com/anime/accel-worldAh! My Goddess|http://www.anime-planet.com/anime/ah-my-goddess";
var reg = /[^|]+/g;
var regResponse = myString.match(reg);
console.log(regResponse);

答案 1 :(得分:1)

尝试" +"而不是" *"

所以,

var reg = /[^|]+/g;

答案 2 :(得分:1)

您需要循环.exec()以检索所有匹配项。 documentation

  

如果正则表达式使用“g”标志,则可以使用exec()   方法多次在同一个字符串中查找连续匹配。

var reg = /[^|]+/g;
while(regResponse = reg.exec(myString)) {
    console.log(regResponse);
}