国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > JavaScript > 正文

巧解 JavaScript 中的嵌套替換(強(qiáng)大正則)

2020-03-22 17:32:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
網(wǎng)友wys提問(wèn):如何僅使用JavaScript支持的正則語(yǔ)法,將

lastIndex這樣的東東。根據(jù)這個(gè)東東,我形成了這樣的思路:
先按外層循環(huán),找到第一組較大的匹配。正則代碼是 table[^ ]* [/s/S]*? //table
定位到這次匹配結(jié)束的起始位置,替換掉這一段字串中所有的 p 。
循環(huán)執(zhí)行。
我覺(jué)得上述思路大致清晰,但是細(xì)節(jié)太多(每次匹配涉及3個(gè)位置點(diǎn),一個(gè)長(zhǎng)度),解起來(lái)并非從容不迫,最終的代碼想必也不會(huì)賞心悅目;尤為重要的是,整個(gè)思路像是原始的 Crack,而不是高手的 Hack 。而且思路與正則關(guān)系不大。我決定換一條路。

思路二

關(guān)鍵是循環(huán)和嵌套。還好不是盜夢(mèng)空間的深層遞歸。能否將匹配的內(nèi)容保護(hù)起來(lái),替換完之后再放回原位呢?

想到這里,就豁然開(kāi)朗了。

思路:先找到所有的匹配內(nèi)容,記路在數(shù)組inner中;

同時(shí)使用該正則,將原字串split為另一個(gè)數(shù)組wrapper;

一個(gè)重要的特點(diǎn)是,wrapper一定比inner多一個(gè)元素,它一一將inner項(xiàng)隔開(kāi),并處于最外層。wrapper 和 inner 的關(guān)系,就像是一個(gè)手掌的5根指頭與4個(gè)指縫的關(guān)系。將中間的元素取出,記下位置,等處理完之后,再將所有的元素粘合在一起。就是這樣簡(jiǎn)單。代碼如下(為了讓問(wèn)題更有普使性,我稍改了一下源字串):

復(fù)制代碼 代碼如下:
script type="text/javascript"
var str=" p table p , p /table p table p p /table p table p p /table

var patt=/ table[^ ]* [/s/S]*? //table
var wrapper_result=str.split(patt);
var inner_result = str.match(/ table[^ ]* [/s/S]*? //table /ig);

var len=inner_result.length;
var final=wrapper_result[0];

for (i=0; i i++)
{
tmp=inner_result[i].replace(/ p /gi," br
final+=tmp+wrapper_result[i+1];
}
alert(final);
/script

貼圖:


更新

果然是能人輩出,評(píng)論更精彩!請(qǐng)看評(píng)論中的這則代碼:
復(fù)制代碼 代碼如下: alert(sourcestr.replace(/ table.*?//table /ig, function($1){return $1.replace(/ p /ig," br ")}));
PS: 本站剛剛添加了評(píng)論中代碼的解析,可以貼代碼了。格式見(jiàn)評(píng)論部分的圖例顯示。謝謝合作!PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 开阳县| 南和县| 广东省| 虹口区| 个旧市| 蓝山县| 夏津县| 嘉义县| 永胜县| 佛山市| 吴江市| 白河县| 苍南县| 当雄县| 乌鲁木齐市| 宜川县| 武平县| 阳朔县| 重庆市| 琼中| 宁国市| 田东县| 六枝特区| 商城县| 昔阳县| 娄底市| 大庆市| 安庆市| 神木县| 靖江市| 平邑县| 万源市| 台北市| 祥云县| 旺苍县| 岳普湖县| 株洲市| 绵阳市| 孟州市| 宁南县| 娱乐|