2009年5月2日星期六

javascript正则表达式获取fckeditor的图片地址

首先声明我用的fckeditor的版本是2.5.1,其次还要说我的正则表达式是刚刚学的,可能代码还有些问题,需要优化,希望看出问题的各位能不吝赐教,谢谢。上面很罗嗦,不过还是要说。
终于要开始正题了,在fckeditor中获取图片地址,要分n种情况,
  1. 1,纯html标签;
  2. 2,word复制过来的数据;
  3. 2.1 在ie中使用;
  4. 2.2 在firefox种使用;
先从fckeditor中得到html,
  1. var oEditor = FCKeditorAPI.GetInstance(contentid) ;
  2. var fckStr = oEditor.GetHTML(false);//获得源代码

对于1的正则表达式是
  1. var reg1_html = /(?:]*src[\ ]*=[\ ]*(?:['"]?)(\S[^'"\ ]+)(?:['"]?\s[^>]*[>]{1}))/gi;
  2. var match = null;
  3. while((match = reg1_html.exec(fckStr)) != null){
  4. //找到每个匹配进行操作。
  5. }
说明:如果match不是null,那match[0] (是零,不是O)就是匹配的整个img标签,match[1]就是src的值;这里用了捕获组和非捕获组,所以match[1]才是src的值,写博客的时候才想起来,这里面有疏漏,并没有使用分组命名,这完全是受了java的影响,因为开始的时候我在java里面使用了,而java并不支持分组命名(据说java7支持分组命名),导致我后来竟然没有加上。

对于2的正则当然要就是:

ie情况下要用到三个正则表达式,不知道有没有更简单的方法;
  1. var reg1_html = /(?:]*src[\ ]*=[\ ]*(?:['"]?)(\S[^'"\ ]+)(?:['"]?\s[^>]*[>]{1}))/gi;
  2. var reg2_word = /(?:]*\s*o\:href=(?:['"]?)(\S[^'"\ ]+)(?:['"]?[^>]+>{1})(?:<\/v\:imagedata>))/gi;
  3. var reg2_word2 = /(?:]*src=(?:['"]?)(\S[^'"\ ]+)(?:['"]?[^>]+)(?:(?:(?:\/>){1})|(?:[>]{1})))/gi;
这三个是都要验证的。因为情况不同。

在firefox下直接按第一种情况就可以了。

大家应该都懂了,如果对正则表达式还不熟悉,可以看看:

http://open4y.blogspot.com/2009/05/blog-post.html
http://open4y.blogspot.com/2009/05/30.html

没有评论:

发表评论