使用正则表达式匹配字符串以获取'='之间的子字符串?

4

样例字符串为 =aa=bb=cc=dd=

我尝试了

string.match(/=(\w*)=/)

但这只会返回aa

我怎样从样本字符串中找到aabbccdd


8
注意,你也可以简单地拆分字符串 :) - Wolph
@WoLpH,如何在不在每个项目中添加额外的**=**或在数组开头或结尾添加空项目的情况下拆分字符串? - Daniel Gimenez
@DanielGimenez - 可以这样做,但在处理数组时很容易跳过空值。 - talemyn
5个回答

4

这个正则表达式将明确匹配您的要求,并将非分隔符部分放在第一个捕获组中:

=([^=]+)(?==)

不幸的是,JavaScript正则表达式没有反向引用,否则这个问题可以更容易地解决。

以下是一些代码:

var str = '=([^=]+)(?==)';

var re = /=([^=]+)(?==)/g,
    ary = [],
    match;

while (match = re.exec(str)) {
    ary.push(match[1]);
}

console.log(ary);

(?==)捕获组有什么作用?没有它,也能正常工作。您能否提供一个重要的字符串示例? - batman
1
@learner,如果没有前瞻,则=a=b=nomatch,=c=中的nomatch会匹配。只是尽可能精确地尝试。 - Daniel Gimenez
@learner,Daniel的意思是(?= ... )是一个前瞻。它检查紧接其后的字符是否与...中的内容相符,但不会消耗它,这样就不会出现替代结果(即aa、cc和缺少bb、dd)。 - Jerry

2

var values = yourString.split('=');您将获得包含所有所需值的数组。


强烈不建议删除答案以摆脱负评,然后重新发布更正的答案。请参见这里这里 - JDB
因为我的答案只需要稍微修改一下,现在它是正确的了。我不认为正确的答案应该被踩 :) - Gintas K
所以我犯了一个小错误,其他人开始在评论中对我进行负面评价和嘲笑,而不是帮助我纠正它。我会说这是一个非常友善的社会 :) - Gintas K
1
稍微调侃一下 - 这不是针对个人。请注意,本网站的目的不是为了牵着你的手,而是为了为全世界提供高质量的答案。发布不正确或误导性的答案与该使命背道而驰,将会得到适当的回应 - 负评和指出错误的评论。你已经纠正了自己的错误并提供了一个不错的答案,这比大多数新手做得好。+1。 - JDB

2

我认为/[^=]+/g可以满足你的需求:试试看


1

描述

这个正则表达式将捕获字符串中所有非相等的字符。

=([^=]*)(?==)

enter image description here

例子

实时例子:http://www.rubular.com/r/vPW2GJqBWP

示例文本

=aa=bb=cc=dd=

匹配

捕获组1将包含以下内容

[0] => aa
[1] => bb
[2] => cc
[3] => dd

人们正在玩游戏,通过对别人的回答进行贬低来人为地夸大自己的回答。 - Ro Yo Mi
1
@Denomales:你忘记了添加全局标志(我也被点了踩)。 - Daniel Gimenez
是的,我也被踩了。Gintas K的回答是唯一一个没有被踩的。 - tckmn
@Doorknob - sp00m也没有任何的反对票。也许他们在串通一气? - JDB
1
@Denomales - 你还缺少了global flag。你的例子是用Ruby写的,不是JavaScript。如果没有全局标志,这个答案在JavaScript中将无法工作。 - JDB
显示剩余6条评论

1
只需简单使用:
string.split('=')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接