如何从textarea中提取所有name与value对应值(无需指定索引)
解决方案:提取textarea中所有name与value的对应值
我来帮你搞定这个问题!你原来的代码只能提取第一个匹配项,是因为通过split分割后仅取了索引[1]的内容,无法遍历所有匹配对。要实现提取所有符合name=(.+?) & value=(.+?)的内容,我们可以用正则表达式全局匹配+循环遍历的方式,具体实现如下:
修改后的完整代码
HTML部分
<textarea name="pull">input type="text" name="bd" value="bd" input type="text" name="bd1" value="bd2" input type="text" name="bd2" value="bd3" </textarea> <br/> <input type="button" onclick="pulldata()" value="Button" /> <br/> <textarea name="tor" id="tor"></textarea>
JavaScript部分
<script language="javascript"> function pulldata() { // 获取源textarea的内容 const raw = document.getElementsByName('pull')[0].value; // 定义正则表达式:全局匹配name和value的键值对 // 解释: // - /g: 全局匹配,会遍历所有符合条件的内容 // - name="([^"]+)": 捕获name属性的值([^"]+表示匹配除双引号外的所有字符) // - \s+: 匹配name和value之间的任意空格 // - value="([^"]+)": 捕获value属性的值 const regex = /name="([^"]+)"\s+value="([^"]+)"/g; let matches; const result = []; // 循环遍历所有匹配结果 while ((matches = regex.exec(raw)) !== null) { // matches[1]是捕获到的name值,matches[2]是捕获到的value值 result.push(`${matches[1]}: "${matches[2]}"`); } // 将结果数组拼接成字符串,放到目标textarea中 document.getElementById('tor').value = result.join(', '); }; </script>
代码说明
- 正则表达式全局匹配:通过
/name="([^"]+)"\s+value="([^"]+)"/g可以一次性匹配所有包含name和value属性的片段,避免了手动指定索引的麻烦。 - 循环遍历匹配结果:使用
while循环调用regex.exec(raw),每次调用会返回下一个匹配的结果,直到没有匹配项时返回null,循环结束。 - 结果拼接:把每一对
name和value按你需要的格式存入数组,最后用join(', ')拼接成完整的字符串,避免了手动处理最后一个逗号的问题(如果需要保留末尾逗号,可以改成result.join(', ') + ',')。
运行效果
点击按钮后,目标textarea会输出:
bd: "bd", bd1: "bd2", bd2: "bd3"
内容的提问来源于stack exchange,提问作者user5724063
相关产品推荐
相关产品推荐

