input 里的 attribute 位置会变动要怎么匹配 name 为特定值的 value 啊??
如 <input name="test" type="text" value="123"> <input name="test" type="text" value="456">
要匹配出 value 的值
1
noqwerty 2019-06-20 16:35:40 +08:00 via Android
如果一定要用正则的话,可以先 match name=test 再提取 value 的值,也可以写两个规则分别匹配 name 在前和 name 在后的情况
|
2
kkkkkrua 2019-06-20 17:15:28 +08:00
var res =/<input.*name=\"test\"?.*value=\"(?<value>.*)\">/ig.exec('<input name="test" type="text" value="123">');
console.log(res.groups.value); |
3
SakuraKuma 2019-06-20 17:46:48 +08:00
先用<input .*>match 出来两个 input.
再用 /(?<key>[^=])="(?<value>[^"])"/依次 exec 出 key/value pair. 一条大概做不到.. |
4
auroraccc 2019-06-20 18:54:31 +08:00
一定非得正则吗,使用 jsdom 之类的解析然后通过方法查找会不会好一些
|
5
yuuko 2019-06-20 21:38:38 +08:00
var s = ['<input name="test" type="text" value="123">', '<input type="text" value="456" name="test">']
var p = /<input\s.*?((name="test".*?value=("|')([^\3]*)\3)|(value=("|')([^\6]*)\6.*?name="test")).*?>/ s.forEach(s => { var g = s.match(p) console.log(g[4] || g[7]); }) 一条正则来了 |
6
nnnToTnnn 2019-07-03 10:42:47 +08:00
let inputStr = ['<input name="test" type="text" value="123">', '<input type="text" value="456" name="test">']
inputStr .forEach(value => { const matchStr = value .match( /<input .*?(\s*value\s*=\s*".*?")/g)[0].replace('<input','').match(/[a-zA-Z]+\s*=\s*".*?"/g) let param = {} matchStr .forEach((element)=>{ const key = element.split('=')[0] const value = element.split('=')[1] param[key ] = value }) console.log( JSON.stringify(param )); }) |