如何修改JavaScript正则表达式以同时解析IP与主机名列表
解决方案
核心思路
不用拆分两次正则,直接用一个正则同时匹配IP地址和对应的主机名,再将匹配结果映射成目标格式的对象,最后组合成JSON数组。
正则表达式说明
使用^([\d.]+)(?:-(\w+))?$匹配每个条目:
([\d.]+):捕获IP地址部分,匹配数字和点的组合(?:-(\w+))?:可选的主机名捕获组,?:表示非捕获分组,?表示该部分可省略,(\w+)捕获主机名(字母数字下划线)
完整JavaScript代码
function convertIpList(ipString) { // 拆分每个条目 const items = ipString.split(','); // 匹配IP和主机名的正则 const ipNodeRegex = /^([\d.]+)(?:-(\w+))?$/; const result = items.map(item => { const match = item.trim().match(ipNodeRegex); if (!match) return null; // 处理无效条目,可根据需求调整 const obj = {"{#ADDR}": match[1]}; // 如果有主机名,添加{#NODE}字段 if (match[2]) { obj["{#NODE}"] = match[2]; } return obj; }).filter(item => item !== null); // 过滤无效条目 return JSON.stringify(result); } // 测试示例 const testInput = "1.1.1.1-NODE1,2.2.2.2-NODE2,3.3.3.3"; console.log(convertIpList(testInput)); // 输出:[{"{#ADDR}":"1.1.1.1","{#NODE}":"NODE1"},{"{#ADDR}":"2.2.2.2","{#NODE}":"NODE2"},{"{#ADDR}":"3.3.3.3"}]
代码说明
- 先通过
split(',')把输入字符串拆分成单个条目 - 遍历每个条目,用正则匹配提取IP和主机名
- 生成对应对象,存在主机名则添加
{#NODE}字段 - 最后用
JSON.stringify转换成目标JSON格式,同时过滤无效条目避免出错
内容的提问来源于stack exchange,提问作者UserBulba
相关产品推荐
相关产品推荐

