如何通过正则表达式排除某些字符串值?

时间:2019-11-14 23:58:59

标签: javascript regex

我是regex的初学者。我有字符串cn=foo,ou=bar,ou=zoo,ou=aa,ou=bb,ou=cc,ou=dd,o=someOrg,c=UK。我需要获取foo,bar and zoo,所以我使用了以下正则表达式来提取javascript中的字符串。

const dn = 'cn=foo,ou=bar,ou=zoo,ou=aa,ou=bb,ou=cc,ou=dd,o=someOrg,c=UK';
const regex = /^cn=(\w+),ou=(\w+),ou=(\w+)/;
const found = dn.match(regex);
console.log(found) --> Array ["cn=foo,ou=bar,ou=zoo", "foo", "bar", "zoo"]

然后根据新要求将ou=bar的值更改为ou=bar - 1。它可以在该字符串值内以任何顺序具有-numeric值。我尝试过使用正则表达式。

const regex = /^cn=(\w+),ou=(.+),ou=(\w+)/;

但是它返回不需要的数据Array ["cn=foo,ou=bar,ou=zoo,ou=aa,ou=bb,ou=cc,ou=dd", "foo", "bar,ou=zoo,ou=aa,ou=bb,ou=cc", "dd"]

我期望的是Array ["cn=foo,ou=bar - 1,ou=zoo", "foo", "bar - 1", "zoo"]。我试图通过正则表达式中的^(ou=aa|ou=bb|ou=cc|ou=dd|o=someOrg|c=UK)排除不需要的数据,但得到了null的值。我希望有人可以帮助我纠正正则表达式语法。

更新:

我尝试过/^cn=(\w+),ou=(\w+\s+-\s+\d+),ou=(\w+)/,但是上面的示例对此进行了介绍,但没有涉及ou=bar-1ou=1bar-之类的东西。

1 个答案:

答案 0 :(得分:0)

解决此问题的简便方法是使其不贪心(注意问号!):

const regex = /^cn=(\w+),ou=(.+?),ou=(\w+)/;

或者,您可能要排除逗号:

const regex = /^cn=(\w+),ou=([^,]+),ou=(\w+)/;