点前后的正则表达式序列

时间:2016-11-29 20:48:52

标签: javascript java regex

我有以下字符串,其中我想获取lastName,firstName,middleName和id(字符串的前四个部分)。

var str = 'SMITH.JOHN.DOE.1234567890, OU=USN, OU=PKI, OU=FOO, O=BAR, C=US';

我很难写一个RegEx,它会在每个点之前给出第n个序列。我有类似的东西,但它没有像我期望的那样工作(我离正则表达式专家很远):

 /(.*?(?=[\.\,])){0}(.*?(?=[\.\,]))/g

最后,我想要lastName = 'SMITH'firstName = 'JOHN'middleName = 'DOE'id = 1234567890,所有这些都没有前导/尾随句号/逗号。

我确实为lastName编写了一个,但我不想为每个变量编写特定的。我宁愿只能改变一个索引跳过号码:

str.match(/^.*?(?=\.)/) => 'SMITH'

对我想要的值使用/.*?(?=[\.\,])/g拆分,但我正在设置的系统将使用它自己的Regex拉取每个值,而不是使用循环。这就是为什么我试图汲取确切的价值。

我可以用Java或JavaScript实现它,但我可能更喜欢Java。

1 个答案:

答案 0 :(得分:2)

您可以使用

^(?:[^,.]+\.){3}([^,.]+)

请参阅regex demo

然后,将3更改为所需索引以将必要值捕获到组1中。

<强>详情:

  • ^ - 字符串开头
  • (?:[^,.]+\.){3} - 3个序列(您可以在此使用{0}获取第一个值,{1}获取第二个等等)除{{1}以外的1个字符}和,(请参阅.)后跟一个点
  • [^,.]+ - 第1组捕获除([^,.]+),
  • 以外的1个字符