JavaScript中使用正则匹配多条,且获取每条中的分组数据
在JavaScript中,正则表达式是一种强大的文本处理工具,尤其在处理字符串时非常有用。本例中,我们需要从一个HTML字符串中提取表格(`<table>`)内的数据,并将其存储为JavaScript数组,以便进一步处理。当遇到无法用XML解析的松散HTML页面时,正则表达式成为一种有效的解决方案。 我们来看一下提供的代码。这里的目标是提取表格中的每一行数据,每行数据包括三个字段:ID、姓名和电话。为了做到这一点,我们定义了一个正则表达式(`regRecord`): ```javascript var regRecord = new RegExp('\\<tr>\\<td>([0-9]{2})\\<\\/td\\>\\<td>([^\\<]+)\\<\\/td\\>\\<td>([0-9]+)\\<\\/td\\>\\<\\/tr\\>', 'g'); ``` 这个正则表达式的工作原理如下: 1. `\\<tr>\\<td>`:匹配`<tr><td>`开头的行。 2. `([0-9]{2})`:捕获两位数字的ID,括号表示创建一个捕获组。 3. `\\<\\/td\\>\\<td>`:匹配`</td><td>`。 4. `([^\\<]+)`:捕获非`<`字符的任意数量的字符,用于获取姓名,这里的`^`表示否定字符集,排除`<`字符。 5. `\\<\\/td\\>\\<td>`:再次匹配`</td><td>`。 6. `[0-9]+`:捕获一个或多个数字作为电话号码。 7. `\\<\\/td\\>\\<\\/tr\\>`:匹配`</td></tr>`,表示行结束。 8. `g`标志:全局搜索,确保可以找到所有匹配项,而不仅仅是第一个。 接下来,我们创建一个`fieldIndex`对象来映射字段名与它们在捕获组中的位置: ```javascript var fieldIndex = { 'Id' : 1, 'Name' : 2, 'Phone' : 3 }; ``` 然后,我们初始化一个空数组`g_records`,用于存储提取的数据: ```javascript var g_records = []; ``` 使用`while`循环和`exec()`方法,我们可以迭代正则表达式在字符串中找到的所有匹配项: ```javascript var record; while ((record = regRecord.exec(str)) != null) { g_records.push({ 'Id' : RegExp["$" + fieldIndex.Id], 'Name' : RegExp["$" + fieldIndex.Name], 'Phone' : RegExp["$" + fieldIndex.Phone] }); } ``` 在每次迭代中,`exec()`返回一个数组,其中包含整个匹配的字符串以及所有捕获组的值。我们使用`RegExp`对象的属性`$n`(n是捕获组的编号)来访问这些值,并将它们放入`g_records`数组中的对象中。 通过遍历`g_records`数组并使用`alert()`显示结果,我们可以验证提取的数据是否正确: ```javascript for (var i = 0; i < g_records.length; i++) { alert("ID:" + g_records[i].Id + ";Name:" + g_records[i].Name + ";Phone:" + g_records[i].Phone); } ``` 总结来说,这个例子展示了如何利用JavaScript的正则表达式功能从HTML字符串中匹配和提取多条数据,并将这些数据组织成结构化的JavaScript对象。这种方法对于处理非结构化或半结构化的HTML数据特别有用,尤其是在没有XML解析器可用的情况下。
- 粉丝: 7
- 资源: 933
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MATLAB【面板】垃圾识别定位.zip
- MATLAB【面板】疲劳专注度检测系统.zip
- MATLAB【面板】疲劳检测GUI设计.zip
- MATLAB【面板】苹果水果分级.zip
- MATLAB【面板】脐橙水果分级.zip
- MATLAB【面板】漂浮物识别.zip
- MATLAB【面板】人脸门禁系统.zip
- MATLAB【面板】人脸考勤设计.zip
- MATLAB【面板】人脸购物系统.zip
- MATLAB【面板】人脸识别.zip
- MATLAB【面板】人脸识别系统.zip
- MATLAB【面板】手势控制系统.zip
- MATLAB【面板】手势识别设计.zip
- MATLAB【面板】手势识别.zip
- MATLAB【面板】手势识别系统.zip
- 云计算平台下Docker容器化技术介绍及其企业应用场景