項目中關(guān)于replace方法的使用在很多情況下都會出現(xiàn)抛蚁,比較常見的就是用于字符串替換。
<script type="text/javascript">
var str = "http://www.baidu.com/";
document.write( str.replace("baidu", "jianshu") );
</script>
正則表達(dá)式的使用
在剛接觸java語言的時候在項目開發(fā)中表單驗證的模塊常常用到惕橙,之后便一直在表單中用到瞧甩。
這兩天在做的一個項目中遇到一個問題,關(guān)于百度編輯器uediter中弥鹦,插入視頻鏈接后預(yù)覽的時候視頻無法播放肚逸,由于視頻是放在我們項目的視頻站點的,沒有加載視頻播放器彬坏,而編輯器預(yù)覽時將外鏈自動生成了<embed>標(biāo)簽朦促,導(dǎo)致無法播放。想到上傳的視頻都是統(tǒng)一的MP4格式栓始,所以就決定使用replace將視頻標(biāo)簽<embed>替換成h5的<video>標(biāo)簽播放务冕。以解決預(yù)覽時播放視頻的問題。
編輯器解析出來的html如下
替換的思路是用正則匹配到embed標(biāo)簽中路徑后綴為MP4的字符串混滔,并將字符串替換為video洒疚。
var reg = /[\n\r\t]*<embed([^>]+?)src=['\"]([^'\"]+?[(\.mp4)|(\.mov)])['\"]([^>]+?)width=['\"](\d+?)['\"]([^>]+?)height=['\"](\d+?)['\"]([^>]+?)\/>[\n\r\t]*/g;
var ed_con = editor.getContent().replace(reg , '<video src="$2" width="$4" height="$6" oncontextmenu="return false;" controls="" preload=""></video>');
^ 匹配輸入字符串的開始位置 $匹配輸入字符串的結(jié)束位置
\ 將下一個字符標(biāo)記符、或一個向后引用坯屿、或一個八進(jìn)制轉(zhuǎn)義符,例如,“\\n”匹配\n油湖。“\n”匹配換行符领跛。序列“\\”匹配“\”而“\(”則匹配“(”乏德。即相當(dāng)于多種編程語言中都有的“轉(zhuǎn)義字符”的概念。 ---轉(zhuǎn)義字符的概念
[xyz] 字符集合吠昭,匹配所包含的任意一個字符喊括。例如,“[abc]”可以匹配“plain”中的“a”矢棚。
[a-z] 字符范圍郑什。匹配指定范圍內(nèi)的任意字符。例如蒲肋,“[a-z]”可以匹配“a”到“z”范圍內(nèi)的任意小寫字母字符蘑拯。
[^xyz] 負(fù)值字符集合。匹配未包含的任意字符兜粘。例如申窘,“[^abc]”可以匹配“plain”中的“plin”。
* 匹配前面的子表達(dá)式任意次
() 將(和) 之間的表達(dá)式定義為“組”(group)孔轴,并且將匹配這個表達(dá)式的字符保存到一個臨時區(qū)域(一個正則表達(dá)式中最多可以保存9個)剃法,它們可以用 \1 到\9 的符號來引用。
.點 匹配除\r回車符\n換行符之外的任何單個字符
+ 匹配前面的子表達(dá)式一次或多次(大于等于1次)路鹰。例如贷洲,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”晋柱。+等價于{1,}恩脂。
? 匹配前面的子表達(dá)式零次或一次。例如趣斤,“do(es)?”可以匹配“do”或“does”中的“do”俩块。?等價于{0,1}。 當(dāng)該字符緊跟在任何一個其他限制符(*,+,?浓领,{n}玉凯,{n,},{n,m})后面時联贩,匹配模式是非貪婪的漫仆。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串泪幌。例如盲厌,對于字符串“oooo”署照,“o+?”將匹配每個“o”即4次匹配,而“o+”將只匹配1次即匹配“oooo”吗浩。
\w匹配包括下劃線的任何單詞字符建芙。類似但不等價于“[A-Za-z0-9_]”,這里的"單詞"字符使用Unicode字符集懂扼。
{n}n是一個非負(fù)整數(shù)禁荸。匹配確定的n次。例如阀湿,“o{2}”不能匹配“Bob”中的“o”赶熟,但是能匹配“food”中的兩個o。