项目中关于replace方法的使用在很多情况下都会出现,比较常见的就是用于字符串替换。
<script type="text/javascript">
var str = "http://www.baidu.com/";
document.write( str.replace("baidu", "jianshu") );
</script>
正则表达式的使用
在刚接触java语言的时候在项目开发中表单验证的模块常常用到,之后便一直在表单中用到。
这两天在做的一个项目中遇到一个问题,关于百度编辑器uediter中,插入视频链接后预览的时候视频无法播放,由于视频是放在我们项目的视频站点的,没有加载视频播放器,而编辑器预览时将外链自动生成了<embed>标签,导致无法播放。想到上传的视频都是统一的MP4格式,所以就决定使用replace将视频标签<embed>替换成h5的<video>标签播放。以解决预览时播放视频的问题。
编辑器解析出来的html如下
替换的思路是用正则匹配到embed标签中路径后缀为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>');
^ 匹配输入字符串的开始位置 $匹配输入字符串的结束位置
\ 将下一个字符标记符、或一个向后引用、或一个八进制转义符,例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。 ---转义字符的概念
[xyz] 字符集合,匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
* 匹配前面的子表达式任意次
() 将(和) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
.点 匹配除\r回车符\n换行符之外的任何单个字符
+ 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配每个“o”即4次匹配,而“o+”将只匹配1次即匹配“oooo”。
\w匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。
{n}n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。