有没有办法解析出计算机名称

时间:2020-09-23 23:05:14

标签: javascript

我有一些代码,但是我发现它可以在90%的计算机上运行。这是distinguishedName: CN = 2016-10-05T12:19:16-05:00 {393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN = Computer01-T2 ,OU =产品,OU =工作站,OU = KDUYA,DC = time,DC = local

我想做的只是解析出ComputerName。在27个OU中,我们使用了3个字母名称,而不是其他所有站点使用的5个字母名称。我已经把头撞在墙上,伸出手来寻求帮助或指导。观看正则表达式上的一些视频可以理解基础知识,但仍可以从事诸如此类的更复杂的事情。

这就是我所拥有的。任何建议或帮助将不胜感激。

let str = "CN=2016-10-05T12:19:16-05:00{393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN=Computer01-T2,OU=Product,OU=Workstations,OU=KDUYA,DC=time,DC=local";
str = str.substring(70, str.length -53);
console.log(str);+

2 个答案:

答案 0 :(得分:0)

我将使用正则表达式:

let str = "CN=2016-10-05T12:19:16-05:00{393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN=Computer01-T2,OU=Product,OU=Workstations,OU=KDUYA,DC=time,DC=local";
let myRegexp = /^[^,]+,CN=([^,]+)/;
let match = myRegexp.exec(str);

console.log(match[1]); // Computer01-T2

/ ^ [^,] +,CN =([^,] +)/部分意味着从字符串开头开始寻找匹配项

start here| CN = 2016-10-05T12:19:16-05:00 {393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN = Computer01-T2,OU =产品,OU =工作站, OU = KDUYA,DC =时间,DC =本地”

/ ^ {[^,] +,CN =([^,] +)/部分意味着要匹配除逗号以外的任何字符

C N = 2016-10-05T12:19:16-05:00 {393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN = Computer01-T2,OU =产品,OU =工作站, OU = KDUYA,DC =时间,DC =本地”

/ ^ [^,] +,CN =([^,] +)/部分意味着要在一行中尽可能多地匹配非逗号字符。

CN=2016-10-05T12:19:16-05:00{393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN = Computer01-T2,OU =产品,OU =工作站,OU = KDUYA,DC =时间,DC =本地”

/ ^ [^,] + ,CN=([^,] +)/部分表示要完全匹配一个字符串:,CN =

CN=2016-10-05T12:19:16-05:00{393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN= Computer01-T2,OU =产品,OU =工作站,OU = KDUYA,DC =时间,DC =本地”

/ ^ [^,] +,CN = ( [^,] + ) //括号的意思是存储字符串的匹配部分,以便我们可以获取它的值,也就是“匹配组”,在这种情况下将包含字符串的计算机名称部分。

/ ^ [^,] +,CN =([^,]+)/部分意味着要在一行中尽可能多地匹配非逗号字符。

CN=2016-10-05T12:19:16-05:00{393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN=Computer01-T2,OU =产品,OU =工作站,OU = KDUYA,DC =时间,DC =本地”

从帖子的评论中可以看到,可以使用多种不同的方式来构造正则表达式。我更喜欢将我的匹配项锚定到我要解析的字符串的开头,也就是/ ^[^,]+,CN =([^,] +)/部分。

regex101网站是尝试和学习正则表达式的好地方。

此链接使用您的示例字符串和我在此答案中使用的正则表达式预填充该网站:https://regex101.com/r/wM8ejj/1/

答案 1 :(得分:0)

使用您提供的字符串,您可以使用此代码段

let str = "CN=2016-10-05T12:19:16-05:00{393DA5A5-4EEF-4394-90F7-CBD0D2F20CC9},CN=Computer01-T2,OU=Product,OU=Workstations,OU=KDUYA,DC=time,DC=local";

let cName = str.split(',').find(e => e.indexOf('Computer') != -1).split('=')[1];

console.log(cName);

这假设您的所有计算机名称中都将包含关键字 Computer 。您可以根据需要修改代码段。