一个关于正则匹配 input 值的问题

2019-06-20 16:26:15 +08:00
 soeasy123

input 里的 attribute 位置会变动要怎么匹配 name 为特定值的 value 啊??

如 <input name="test" type="text" value="123"> <input name="test" type="text" value="456">

要匹配出 value 的值

1504 次点击
所在节点    问与答
6 条回复
noqwerty
2019-06-20 16:35:40 +08:00
如果一定要用正则的话,可以先 match name=test 再提取 value 的值,也可以写两个规则分别匹配 name 在前和 name 在后的情况
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);
SakuraKuma
2019-06-20 17:46:48 +08:00
先用<input .*>match 出来两个 input.
再用 /(?<key>[^=])="(?<value>[^"])"/依次 exec 出 key/value pair.

一条大概做不到..
auroraccc
2019-06-20 18:54:31 +08:00
一定非得正则吗,使用 jsdom 之类的解析然后通过方法查找会不会好一些
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]);
})

一条正则来了
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 ));
})

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/575881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX