第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

一個(gè)中高階難度的 JavaScript 正則場(chǎng)景

一個(gè)中高階難度的 JavaScript 正則場(chǎng)景

慕尼黑5688855 2019-03-06 13:15:56
問(wèn)題描述??這是一個(gè)字符串正則替換的問(wèn)題,我自己想了一晚上也想不出用純正則就能搞定這個(gè)問(wèn)題。但這個(gè)問(wèn)題看起確實(shí)不復(fù)雜,所以來(lái)思否求大佬解答。??大概的特征是這樣的,我需要在一個(gè)字符串文件中查找類(lèi)似 start template template ... end 的字符串。其中 start 和 end 是固定形式的字符串,template 是一個(gè)正則模式,我需要將位于 start 和 end 之間的滿(mǎn)足 template 模式的字符串前面加一個(gè)前綴 prefix,最后我希望文件中的滿(mǎn)足條件的字符串被修改為 start prefix-template prefix-template ... end 。問(wèn)題實(shí)例??下面是一個(gè)例子var str = "lajishuju..Ejhohaodf98 a.length+b.length+10+:rowspan=a.length + b.length+ c.length20:rowspan=a.length+b.length lajishujudsjalfj)Ufaojd";??我希望能把 :rowspan= 和 \d+ 之間的 x.length 形式的字符串修改為 sub.x.length。替換后的字符串應(yīng)如下:"lajishuju..Ejhohaodf98 a.length+b.length+10+:rowspan=sub.a.length + sub.b.length+ sub.c.length20:rowspan=a.length+b.length lajishujudsjalfj)Ufaojd"??明細(xì)字符串中加入了干擾字符串,如有 :rowspan= 開(kāi)頭卻沒(méi)有 \d+ 結(jié)尾的字符串,和有結(jié)尾卻沒(méi)開(kāi)頭的字符串。我的想法??我寫(xiě)出的正則只能利用 (?=) 斷言排除有開(kāi)頭沒(méi)結(jié)尾干擾字符串的干擾,無(wú)法判斷是否具有合理的 :rowspan= 開(kāi)頭。??懇請(qǐng)大佬指條明路,我和同學(xué)商量一下,他說(shuō)不可能用一個(gè)正則一次解決這個(gè)問(wèn)題。但我覺(jué)的這個(gè)模式特征這么明顯,看起了也很簡(jiǎn)單,如此強(qiáng)大的正則不應(yīng)該做不到,請(qǐng)大佬傳道解惑!另外??題目中的“中高階難度”是我大言不慚,畢竟我是個(gè)沒(méi)怎么寫(xiě)過(guò)正則的菜雞?,如有不當(dāng),請(qǐng)見(jiàn)諒!
查看完整描述

4 回答

?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

var str = "lajishuju..Ejhohaodf98 a.length+b.length+10+:rowspan=a.length + b.length+ c.length20:rowspan=a.length+b.length lajishujudsjalfj)Ufaojd";


var r = str.replace(/(:rowspan=)(.+?)(?=\d*:rowspan)/g, function (...m)

{

    m[2] = m[2].replace(/\b([a-z]\w*\.length)/g, 'sub.$1');


    return m[1] + m[2];

});


console.log(r);


查看完整回答
反對(duì) 回復(fù) 2019-03-19
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊

var str = "lajishuju..Ejhohaodf98 a.length+b.length+10+:rowspan=a.length + b.length+ c.length20:rowspan=a.length+b.length lajishujudsjalfj)Ufaojd";

let reg=/:rowspan=[^\d]*?(?:([a-z])\.length\s*\+\s*)+(?:([a-z])\.length)[^\d]*?\d+/g;

let result=str.replace(reg,$1=>$1.replace(/([a-z]\.)(?=length)/g,'sub.$1'));

console.log(result);

//lajishuju..Ejhohaodf98 a.length+b.length+10+:rowspan=sub.a.length + sub.b.length+ sub.c.length20:rowspan=a.length+b.length lajishujudsjalfj)Ufaojd


查看完整回答
反對(duì) 回復(fù) 2019-03-19
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊

str.replace(/:rowspan=([^\d]+)\d/g, function($1){return $1.replace(/(\w.length)/g, '^^.$1')})

至少需要2個(gè)正則 因?yàn)橐粋€(gè)正則沒(méi)辦法在選定范圍的情況下同時(shí)匹配里面隨機(jī)個(gè)數(shù)的表達(dá)式


查看完整回答
反對(duì) 回復(fù) 2019-03-19
?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊

var str = "lajishuju..Ejhohaodf98 a.length+b.length+10+:rowspan=a.length + b.length+ c.length20:rowspan=a.length+b.length lajishujudsjalfj)Ufaojd:rowspan=a.length + b.length2fsdfsdfsdf:rowspan=a.length + b.length2";

var gap = ':rowspan=';

var arrs = str.split(gap);

var head = arrs.shift();

var cnt = arrs.map(function(v){

  if(/\d+/.test(v)){

    var m = v.replace(/(\w*\.length)/g,'sub.$1');

    return gap + m;

  }else{

    return gap + v;

  }

});

var ret = head + cnt.join('');


查看完整回答
反對(duì) 回復(fù) 2019-03-19
  • 4 回答
  • 0 關(guān)注
  • 452 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)