亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要 javascript 正則表達式,僅括號中的數字,多個

需要 javascript 正則表達式,僅括號中的數字,多個

桃花長相依 2022-05-14 15:20:22
問題:我想用純 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)按要求返回。我可以在這里做什么?
查看完整描述

2 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

您可以簡化您的正則表達式:


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);


查看完整回答
反對 回復 2022-05-14
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

更新成功/結果以分享我的想法:


我有一張桌子


<table>


    <tr>

        <td><span>1</span></td>

        <td><span id="span2">2</span></td>

        <td><span>3</span></td>

        <td><span>4</span></td>

    </tr>


    <tr>

        <td><span>5</span></td>

        <td><span>6</span></td>

        <td><span>7</span></td>

        <td><span>8</span></td>

    </tr>


</table>

并使用以前的答案我編寫了這個小腳本,這是一個簡單的選擇器引擎的開始。


const ltrim = (haystack, needle) => {

    var regex = new RegExp('^'+needle);

    return haystack.replace(regex, '');

}


const rtrim = (haystack, needle) => {

    var regex = new RegExp(needle+'$');

    return haystack.replace(regex, '');

}


const $ = (s) => {

    var el = document;


    if (!s.match(/:eq/g)) {

        var cut_index = Math.max(s.lastIndexOf('>'),s.lastIndexOf(' '))+1;

        var last = s.substring(cut_index);

        if (/#/.test(last)) el = el.querySelector(s);

        else el = el.querySelectorAll(s);

    }

    else {

        var m = s.match(/:eq\(\d+\)/g);

        var p = s.split(/:eq\(\d+\)/g);

        for (i in p) {


            if (p[i] == '') i++;

            else {

                if (i == p.length-1) {

                    if (p[i].match(/#/)) el = el.querySelector(p[i]);

                    else el = el.querySelectorAll(p[i]);

                }

                else el = el.querySelectorAll(p[i])[m[i].match(/\d+/g)];

            }

        }

    }

    return el;

}

現在我可以使用類似 jquery 的選擇器語法遍歷表


alert($('table tr td span#span2').innerHTML); // 2

alert($('table tr:eq(1) td:eq(1) span:eq(0)').innerHTML); // 6

alert($('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 選擇器的支持,將來會看到。如果有改進,將在這里進行進一步的更新。


查看完整回答
反對 回復 2022-05-14
  • 2 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號