JavaScript RegExp 对象

20151026 RegExp对象

正则表达式

写规则时最好把描述加上
正则表达式[Regular Expression]又称作正则表达式或常规表示法,它使用单个字符串来描述,匹配一系列符合某个句法规则的字符串,通常使用正则表达式来检索或替换那些符合某个模式的文本。

【在正则表达式中空格也是一个规则,因此不能随便添加空格】

一、命令

Bracket括号:正则表达式中有3中类型的括号:

  • []: 需要匹配的字符
  • {}: 需要匹配的数量
  • (): 用来惊醒规则的分组
  • caret ^插入符号,表达正则表达式的开始
  • Dollars $美元符号,表达正则表达式的结束

表达式 描述

[abc]   查找给定集合内的任何字符。
[^abc]  查找给定集合外的任何字符。
[0-9]   从 0 至 9 的数字。
[a-z]   从小写 a 到小写 z 的字符。
[A-Z]   从大写 A 到大写 Z 的字符。
[A-z]   从大写 A 到小写 z 的字符。  【大写A到小写z中包含了7个其他特殊字符——ascii码表】
(red|blue|green)    查找任何指定的选项。

量词 描述

n+          匹配任何包含至少一个 n 的字符串。
n*          零个或多个 n 的字符串。
n?          零个或一个 n 的字符串。
n{X}        X 个 n 的序列的字符串。
n{X,Y}      X个 到 Y 个 n 的序列的字符串。(包括x、y个)
n{X,}       至少 X 个 n 的序列的字符串。
n$         结尾为 n 的字符串。
^n          开头为 n 的字符串。
?=n         其后紧接指定字符串 n 的字符串。
?!n         其后没有紧接指定字符串 n 的字符串。

元字符

元字符(Metacharacter)是拥有特殊含义的字符:

元字符 描述
.   查找单个字符,除了换行和行结束符。
\w   单词字符。
\W   非单词字符。
\d   数字。
\D   非数字字符。
\s   空白字符。
\S   非空白字符。
\n  查找换行符。
\f  查找换页符。
\r  查找回车符。

        var str = "12dfds2sfs34jklgkf45djs3454365gft34";
        var regExp1 = /\d/;  //1  只找寻第一个符合匹配的值
        var regExp2 = /\d/g;    //在对象中找寻符合匹配的一个字符,并返回这个字符串集合
        var regExp3 = /\d+/g;    //在整个对象中找寻符合匹配的至少一个,并返回这个字符串集合
        console.log(str.match(regExp1));
        console.log(str.match(regExp2));  // ["1", "2", "2", "3", "4", "4", "5", "3", "4", "5", "4", "3", "6", "5", "3", "4"]
        console.log(str.match(regExp3));    // ["12", "2", "34", "45", "3454365", "34"]
        /*使用正则表达式方式 提取字符串中的数组*/



        var regExp = /^[a-z]{2,}$/;    
        var a = "";    //true
        var b = "bzdsfbfd";   //true
        var c = "dsfgh";    //flase
        console.log(regExp.test(a));
        console.log(regExp.test(b));
        console.log(regExp.test(c));
        /*匹配任何包含连个以上a-z的字符的字符串。*/
  • object.match(a);查询并返回符合a的要去的字符。
  • regExp.test(object); 返回object是否匹配regExp的规则。——regExp提供的方法
  • //g;添加了g 则表示在整个对象中进行匹配

怎样阻止表单提交?

在onsubmit(onsubmit必须添加在form标签上)事件中return false;

例:



var myform = document.getElementById("myform"); var username = document.getElementById("username"); var userpassword = document.getElementById("userpassword"); var submit = document.getElementById("submit"); function forms(a,b) { a.onsubmit = function() { return b; //返回true为提交,false为阻止提交; } } submit.onclick = function() { var a = /^[0-9|a-z]{4,10}$/; //用户名为数字或小写字母 var b = /^[A-Z|a-z]{6,15}$/; //密码为小写或大写字母 if(a.test(username.value) || b.test(userpassword.value)) { forms(myform,true); console.log(true); } else { forms(myform,false); console.log(false); } }

对象

JavaScript有一种复杂数据类型,对象数据类型,和五中简单数据类型(Number、String、Boolean、Null、Undefined)。

一、什么是对象?

对象是一组无序的原始数据类型(或引用类型)并且这个序列以键值对的形式存序列中的每一项被称之为属性(函数称为方法并且每一个属性名必须是唯一的)。

属性名可以是字符串或数字,但如果属性名是数字,它就必须用方括号来取值。

例:

(function(){
    var a = {
        20: "name",
        30: "age"
    };        
    console.log(a.30);  //报错
    console.log(a["30"]);  //age
}())

作为JavaScript开发人员会经常使用到对象数据类型,常见的用途使用来存储数据和创建自定义的函数。

二、引用数据类型和原始数据类型

引用数据类型和原始数据类型之间的主要区别之一在于引用数据类型的值是以引用的形式存储的,而不是像原始数据类型那样以值的形式直接将值存储到变量里。

三、对象数据属性所具有的特性

每个数据属性除了具有键值对的特性外还有其他三个特性(这三个特性初始值都为true)。

- 可配置性(Configurable) 指明该属性是否可以被删除

- 可枚举性(Enumerable) 指明该属性是否可能在for…in中被返回

- 可写性(Writable) 指明该属性是否可以更改

(function(){
    var person = {
        name: "zhangsan",
        age: 21,
        sayName: function() {
            console.log("this.name");
        }
    }
    // console.log(person.name);
    // console.log(person.age);
    // person.sayName();


    Object.defineProperty(person,"name", {//efineProperty设置对象
        configurable: true, //可配置性(是否可以被删除)
        enumerable: true,   //可枚举性(是否可能在for...in中被返回)
        writable: true,     //可写性(是否可以更改)
        value: "lis"
    });

    delete person.name; //delete用来删除属性 

    /*可枚举性(是否可能在for...in中被返回)   用for...in语句来遍历对象属性*/
   for(var x in person) {
       console.log(x + ":" + person[x]);
   }
}());

四、创建对象的方式

1、 JSON 键值对的方式*

每个属性之间用逗号隔开,最后一个属性不加任何符号。

(function(){
    var person = {
        name: "shangsan",   //每个属性之间用逗号隔开,最后一个属性不加任何符号。
        age: 2,
        sayName: function() {
            console.log(this.name);
        }
    }
    console.log(person.name);
    console.log(person.age);
    person.sayName();
}());

2、函数:

  • 1、普通函数:直接返回JSON 键值对的方式

    每个属性之间用逗号隔开,最后一个属性不加任何符号。

    (function(){
        function person(name,age) {
            return {
                name: name,   //每个属性之间用逗号隔开,最后一个属性不加任何符号。
                age: age,
                sayName: function() {
                    console.log(this.name);
                }
            };  //此处注意要加分号
        }
        var a = person("zhangsan",12);
        var b = person("lis",1132);
        console.log(a.name);
        console.log(a.age);
        a.sayName();
        console.log(b.name);
        console.log(b.age);
        b.sayName();
    }());
    
  • 2、OBJECT

    (function(){
        function person(name,age) {
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.sayName = function() {
                console.log(this.name);
            };
            return obj;
        }
        var a = person("zhangsan",12);
        var b = person("lis",1132);
        console.log(a.name);
        console.log(a.age);
        a.sayName();
    }());
    
  • 3、构造函数方式 使用关键字neww(常用方式)

    (function(){
        //类/类模板
        function Person(name,age) {
            this.name = name;
            this.age = age;
            this.sayName = function() {
                console.log(this.name);
            }
        }
        var a = new Person("zhangsan",12);
        console.log(a.name);
        console.log(a.age);
        a.sayName();
    }());
    

四、继承(方法)

1、对象冒充

原理:让父类的构造函数成为子类的方法,通过this关键字给所有属性和方法赋值。

2、call和apply的方法

每个对象都有call的方法。——原理还是同象冒充方式一样。

3、原型继承

原型链的方式不能实现传参。

4、混合模式的继承方式——提高内存使用率

你可能感兴趣的:(学习)