JavaScript大杂烩8 - 理解文本解析的"黄金搭档"
concat:连接字符串
slice,substr,substring:获取子串
slice,substring和 substr(不建议使用,ECMAscript 因为没有对该方法进行标准化)都可返回字符串的指定部分。slice比substring要灵活一些,因为它允许使用负数作为参数,除了这一点其它都是一样的。
split:拆分字符串为数组
toLowerCase,toUpperCase:转换大小写
直接看例子:
var firstName = 'Frank ';
var secondName = 'Dong';
var name = firstName.concat(secondName);
// 使用加号似乎更简洁
var name1 = firstName + secondName;
alert(name);
alert(name.slice(6)); // Dong
alert(name.slice(6,7)); // D
alert(name.substring(6)); // Dong
alert(name.substring(6,7)); // D
// 拆分为单词
alert(name.split(' ')); //Frank,Dong
// 字符串转成字符数组的简便方式
alert(name.split('')); //F,r,a,n,k,D,o,n,g
alert(name.toLowerCase()); // frank dong
alert(name.toUpperCase()); // FRANK DONG
anchor,link,blink,big,small,bold,italics,strike,sub,sup:包装成特定的元素或增加特定的样式
fontcolor,fontsize:添加字体信息
fixed:转换成打印机格式
这个不多说了,只需要看一个例子就可以了:
var str = 'Frank Dong!';
alert(str.strike());
运行一下就可以看到包装后的html元素。
charAt:获取字符
indexOf,lastIndexOf:检索子串的位置
看个简单的例子:
var str = 'Frank Dong!';
alert(str.charAt(0));
alert(str.indexOf('Dong'));
alert(str.lastIndexOf('n'));
这里还有几个重量级的方法:
match,replace,search:检索和替换子串
这一组方法比较特别,这3个方法再加上前面的split方法是支持正则表达式的,功能十分强大,在总结它们之前先来看一下正则表达式对象。
// 字面量方式
/pattern/attributes
// new方式
new RegExp(pattern, attributes);
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
经过这种方式,我们就定义了一个正则表达式对象,有了对象我们就可以使用它的方法了,该对象有下列方法:
var str = "Frank0 Dong0 Frank1 Dong1";
var patt = /Frank/g;
var str2 = str.replace(patt,"FF");
alert(str2);
patt = /Dong/g;
patt.compile(patt);
str2 = str.replace(patt,"DD");
alert(str2);
这个例子中就用到了支持正则表达式的string方法replace,这个方法会替换所有满足条件的文本。
var str = "Frank0 Dong0 Frank1 Dong1";
var patt = /Frank\d/g;
// 总是从开始查找第一个匹配的文本,然后返回其索引值
var result = str.search(patt);
alert(result);
// 拆成数组
result = str.split(' ');
for (var i = 0, len = result.length; i < len; i++) {
alert(result[i]);
}
// 查找所有匹配的文本
result = str.match(patt);
for (var i = 0, len = result.length; i < len; i++) {
alert(result[i]);
}
alert(/[abc]/.test('a')); //true
var str = "Frank0 Frank1";
var patt = /Frank\d/g;
var result;
while ((result = patt.exec(str)) != null) {
alert(result);
}
这里特别需要注意的是g属性,有没有这个属性对很多的方法结果都有影响,比如正则表达式对象的exec方法,字符串对象的match方法等,没有这个属性的时候总是匹配第一次出现的文本,只有加上了这个属性,它们才会正确的去匹配所有出现的文本,所以一般来说加上g属性好处还是很多的。
//获取字符数组
String.prototype.toCharArray = function()
{
return this.split('');
}
//获取N个相同的字符串
String.prototype.repeat = function(num)
{
var tmpArr = [];
for(var i=0; i<num; i++) tmpArr.push(this);
return tmpArr.join('');
}
//逆序
String.prototype.reverse = function()
{
return this.split('').reverse().join('');
}
//测试是否是数字
String.prototype.isNumeric = function()
{
var tmpFloat = parseFloat(this);
if(isNaN(tmpFloat)) return false;
var tmpLen = this.length - tmpFloat.toString().length;
return tmpFloat + "0".repeat(tmpLen) == this;
}
//测试是否是整数
String.prototype.isInt = function()
{
if(this == "NaN") return false;
return this == parseInt(this).toString();
}
// 合并多个空白为一个空白
String.prototype.resetBlank = function()
{
return this.replace(/s+/g,' ');
}
// 除去左边空白
String.prototype.trimL = function()
{
return this.replace(/^s+/g,'');
}
// 除去右边空白
String.prototype.trimR = function()
{
return this.replace(/s+$/g,'');
}
// 除去两边空白
String.prototype.trim = function()
{
return this.replace(/(^s+)|(s+$)/g,'');
}
// 保留数字
String.prototype.getNum = function()
{
return this.replace(/[^d]/g,'');
}
// 保留字母
String.prototype.getEn = function()
{
return this.replace(/[^A-Za-z]/g,'');
}
// 保留中文
String.prototype.getCn = function()
{
return this.replace(/[^u4e00-u9fa5uf900-ufa2d]/g,'');
}
// 得到字节长度
String.prototype.getRealLength = function()
{
return this.replace(/[^x00-xff]/g,'--').length;
}
// 从左截取指定长度的字串
String.prototype.left = function(n)
{
return this.slice(0,n);
}
// 从右截取指定长度的字串
String.prototype.right = function(n)
{
return this.slice(this.length-n);
}
// HTML编码
String.prototype.htmlEncode = function()
{
var re = this;
var q1 = [/x26/g,/x3C/g,/x3E/g,/x20/g];
var q2 = ['&','<','>',' '];
for(var i=0; i<q1.length; i++) re = re.replace(q1[i],q2[i]);
return re;
}
// Unicode转化
String.prototype.ascW = function()
{
var strText = '';
for (var i=0; i<this.length; i++) strText += '&#' + this.charCodeAt(i) + ';';
return strText;
}
经典,可以收藏了。
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配HTML标记的正则表达式:/< (.*)>.*|< (.*) />/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
除了这里讨论的这些核心的对象外,JavaScript还提供了一些辅助的对象,提供数学运算的Math对象(正/余弦,正/余切,指/对数,随机数,取整等功能),处理日期的Date对象(创建日期并以各种格式输出),这些对象都很简单,就不多说了。
JavaScript大杂烩8 - 理解文本解析的"黄金搭档"的更多相关文章
- JavaScript大杂烩12 - 理解Ajax
AJAX缘由 再次谈起这个话题,我深深的记得就在前几年,AJAX被炒的如火如荼,就好像不懂AJAX,就不会Web开发一样.要理解AJAX为什么会出现,就要先了解Web开发面临的问题. 我们先来回忆一下 ...
- JavaScript大杂烩11 - 理解事件驱动
前面我们回顾了前端JavaScript只干的两件事:操作BOM与操作DOM,那么什么时候去干这些事呢?答案是需要干的时候去干.那么什么时候是需要干的时候呢?答案是事件被触发的时候.这就是通常所说的“事 ...
- JavaScript大杂烩10 - 理解DOM
操作DOM 终于到了JavaScript最为核心的部分了,通常来说,操作DOM,为页面提供更为友好的行为是JavaScript根本目标. DOM树 - HTML结构的抽象 既然DOM是操纵HTML ...
- JavaScript大杂烩9 - 理解BOM
毫无疑问,我们学习JavaScript是为了完成特定的功能.在最初的JavaScript类型系统中,我们已经分析过JavaScript在页面开发中充当着添加逻辑的角色,而且我们知道JavaScript ...
- JavaScript大杂烩1 - 理解JavaScript的类型系统
随着硬件水平的逐渐提高,浏览器的处理能力越来越强大,本人坚信,客户端会越来越瘦,瘦到只用浏览器就够了,服务端会越来越丰满:虽然很多大型的程序,比如3D软件,客户端仍然会存在,但是未来的主流必将是浏览器 ...
- JavaScript大杂烩7 - 理解内置集合
JavaScript内置了很多对象,简单的类型如String,Number,Boolean (相应的"值类型"拥有相同的方法),复杂一点的如Function,Object,Arra ...
- JavaScript大杂烩6 - 理解JavaScript中的this
在JavaScript开发中,this是很常用的一个关键字,但同时也是一个很容易引入bug的一个关键字,在这里我们就专门总结一下页面中可能出现的this关键字(包括几种在其他页面文件中出现的this) ...
- JavaScript大杂烩4 - 理解JavaScript对象的继承机制
JavaScript是单根的完全面向对象的语言 JavaScript是单根的面向对象语言,它只有单一的根Object,所有的其他对象都是直接或者间接的从Object对象继承.而在JavaScript的 ...
- JavaScript大杂烩3 - 理解JavaScript对象的封装性
JavaScript是面向对象的 JavaScript是一种基于对象的语言,你遇到的所有东西,包括字符串,数字,数组,函数等等,都是对象. 面向过程还是面向对象? JavaScript同时兼有的面向过 ...
随机推荐
- OpenCL科普及在ubuntu 16.04 LTS上的安装
OpenCL(Open Computing Language,开放计算语言)是一个为异构平台编写程序的框架,此异构平台可由CPU.GPU.DSP.FPGA或其他类型的处理器與硬體加速器所组成.Open ...
- javascript 异步解析
js 异步解析 一 .js单线程分析 我们都知道js的一大特点是单线程,也就是同一时间点,只能处理一件事,一句js代码.那为什么js要设计成单线程而不是多线程呢?这主要和js的用途有关,js作为浏览器 ...
- 在Vue中使用CodeMirror 格式显示错误 行数错乱 & 代码隐藏
项目需要在线展示和编辑Json文件,所以需要找一个代码编辑器,因为我们的项目直接使用的 vueAdmin-template 这个模板 json编辑器也是直接从 vue-element-admin 项目 ...
- Java工程师学习指南 完结篇
Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...
- [教程向]__在IDEA中使用git+github实现代码的版本控制
前言 在前面,我们对git与github有了一个简单的了解,了解到版本控制的必要性,和github远程代码仓库的一些作用.那么我们如何在IDEA重实现代码的版本控制呢. 前提 首先你要安装有git,注 ...
- SQL优化经验总结
一. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率 通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extend ...
- JSP+Servlet+mysql简单示例【图文教程】
下载MYSQL:http://dev.mysql.com/downloads/ 下载安装版的 然后安装(安装步骤就不详细说了) 安装好之后,点击托盘图标,打开管理工具 创建一个数据库 数据库的名字 ...
- Animate.css(一款有意思的CSS3动画库)
官网:https://daneden.github.io/animate.css/ animate.css 是一款跨浏览器的动画库. 使用方式: 在页面的 <head>中引入样式文件: & ...
- 【学习笔记】JS设计模式总结
前言:这段时间都在学习Vue的知识,虽然手边放着一本js高程,但确实好久没有好好复习了.温故而知新,因此特意把JS常见的设计模式总结,希望对大家有所帮助... 1. 工厂模式 释义:像工厂一样流水线般 ...
- ssh隧道的妙用
场景说明:A主机和B主机在同一个园区网,A主机可以出公网,B主机不可以出公网.渗透工程师已经拿下A主机控制权. 一.如何在外网访问到B主机 方案:ssh本地端口映射背景:当我们拿下A主机之后想和B主机 ...