我有以下字符串,其中我想获取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。
答案 0 :(得分:2)
您可以使用
^(?:[^,.]+\.){3}([^,.]+)
请参阅regex demo
然后,将3更改为所需索引以将必要值捕获到组1中。
<强>详情:
^
- 字符串开头(?:[^,.]+\.){3}
- 3个序列(您可以在此使用{0}
获取第一个值,{1}
获取第二个等等)除{{1}以外的1个字符}和,
(请参阅.
)后跟一个点[^,.]+
- 第1组捕获除([^,.]+)
和,