猿问

需要 javascript 正则表达式,仅括号中的数字,多个


问题:我想用纯 javascript 编写一个函数,它使用带有 :eq(0) 声明的类似 Jquery 的选择器,让我们说例如遍历一个像这样的表


$('tr:eq(8) > td:eq(13)').val();

为此,我正在尝试编写一个正则表达式,但我被困在这里


var str = "I don't want +5+ and not 10 or [12] nor (120) but :eq(5) and :eq(120)";

var matches = str.match(/\:eq\(\d+(\d{1,2})\)?/g);

console.log('matches: '+matches);

它只返回matches: :eq(120)但不是matches: :eq(5),:eq(120)按要求返回。我可以在这里做什么?


桃花长相依
浏览 163回答 2
2回答

jeck猫

您可以简化您的正则表达式:var str = "I don't want +5+ and not 10 or [12] nor (120) but :eq(5) and :eq(120)";const matches = str.match(/:eq\(\d+\)/g);console.log('matches: '+matches);

哔哔one

更新成功/结果以分享我的想法:我有一张桌子<table>&nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; &nbsp; <td><span>1</span></td>&nbsp; &nbsp; &nbsp; &nbsp; <td><span id="span2">2</span></td>&nbsp; &nbsp; &nbsp; &nbsp; <td><span>3</span></td>&nbsp; &nbsp; &nbsp; &nbsp; <td><span>4</span></td>&nbsp; &nbsp; </tr>&nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; &nbsp; <td><span>5</span></td>&nbsp; &nbsp; &nbsp; &nbsp; <td><span>6</span></td>&nbsp; &nbsp; &nbsp; &nbsp; <td><span>7</span></td>&nbsp; &nbsp; &nbsp; &nbsp; <td><span>8</span></td>&nbsp; &nbsp; </tr></table>并使用以前的答案我编写了这个小脚本,这是一个简单的选择器引擎的开始。const ltrim = (haystack, needle) => {&nbsp; &nbsp; var regex = new RegExp('^'+needle);&nbsp; &nbsp; return haystack.replace(regex, '');}const rtrim = (haystack, needle) => {&nbsp; &nbsp; var regex = new RegExp(needle+'$');&nbsp; &nbsp; return haystack.replace(regex, '');}const $ = (s) => {&nbsp; &nbsp; var el = document;&nbsp; &nbsp; if (!s.match(/:eq/g)) {&nbsp; &nbsp; &nbsp; &nbsp; var cut_index = Math.max(s.lastIndexOf('>'),s.lastIndexOf(' '))+1;&nbsp; &nbsp; &nbsp; &nbsp; var last = s.substring(cut_index);&nbsp; &nbsp; &nbsp; &nbsp; if (/#/.test(last)) el = el.querySelector(s);&nbsp; &nbsp; &nbsp; &nbsp; else el = el.querySelectorAll(s);&nbsp; &nbsp; }&nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; var m = s.match(/:eq\(\d+\)/g);&nbsp; &nbsp; &nbsp; &nbsp; var p = s.split(/:eq\(\d+\)/g);&nbsp; &nbsp; &nbsp; &nbsp; for (i in p) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (p[i] == '') i++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i == p.length-1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (p[i].match(/#/)) el = el.querySelector(p[i]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else el = el.querySelectorAll(p[i]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else el = el.querySelectorAll(p[i])[m[i].match(/\d+/g)];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return el;}现在我可以使用类似 jquery 的选择器语法遍历表alert($('table tr td span#span2').innerHTML); // 2alert($('table tr:eq(1) td:eq(1) span:eq(0)').innerHTML); // 6alert($('table tr:eq(1) td:eq(2) span')[0].innerHTML); // 7我现在很高兴。这个表达式,例如$('table tr:eq(1) td span').forEach(elem => {elem.classList.add('yellow')});使用常规的 JS 语法来突出显示一整行,或者只是一个单元格:$('table tr:eq(1) td span:eq(2)').classList.add('yellow');我不确定其他类似 jquery 的 css 选择器的支持,将来会看到。如果有改进,将在这里进行进一步的更新。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答