zoukankan      html  css  js  c++  java
  • 转 正则表达式

    JS中正则表达式有几种不同的使用方法,一些用法是通过字符串对象来使用,另外一些通过正则表达式对象使用。

    一、RegExp(正则表达式)的属性和方法
    1、属性
    RegExp的实例有几个只读的属性:
    global表示是否为全局匹配,
    igoreCase表示是否忽略大小写,
    multiline表示是否为多行匹配,
    source是正则式的源文本,如/[ab]/g的源文本就是[ab];

    另外还有一个可写的属性是lastIndex,表示下次执行匹配时的起始位置。
    2、方法
    RegExp有两个方法exec和test,均以待匹配的字符串为参数。

    (1)exec
    如果没有发现匹配则返回null,否则返回一个数组,该数组的第一项为匹配的字符串,接下去为与各个子表达式相匹配的子串;该数组的属性index表示发生匹配的位置,属性input表示被检索的字符串。
    注意:如果正则式具有全局属性g,则执行一次exec后,该RegExp对象的lastIndex属性会被设为紧接着匹配子串的字符位置,当该RegExp对象再次调用exec时就会从lastIndex处开始执行匹配。如果exec没有发现任何匹配,它会将lastIndex设为0。当然,如果没有全局属性g的话,exec总是会将lastIndex设为0。
    例如:
    re = /[ab]+(c)+/g;
    m = re.exec('acabcc');
    // m[0]为'a', m[1]为'c', m.index为0,m.input为'acabcc',re.lastIndex为2
    m = re.exec('acabcc');
    // m[0]为'ab', m[1]为'cc', m.index为2,m.input为'acabcc',re.lastIndex为6
    m = re.exec('acabcc');
    // m为null,re.lastIndex为0

    (2)test
    test方法执行一次exec,如果发生匹配返回true,否则返回false。
    因为test方法是调用exec的,所以也可以用test方法来遍历一个字符串。


    二、和正则式相关的几个String(字符串)的方法
    1、search(RegExp)
    返回第一个与之匹配的子串的开始位置,如果没有匹配则返回-1。
    传入的参数如果不是正则式则会传递给RegExp构造函数先转成正则式再进行匹配.
    不支持全局匹配g
    2、replace(RegExp, replacement)
    第一个参数是正则式,第二个参数是要进行替换的字符串。
    如果正则式指定了全局模式g,则会替换所有的匹配,否则只替换第一个匹配。replacement中的$符号具有特殊含义,$1,$2,...,$99 代表与正则式中的第1个到第99个子表达式相匹配的文本,$& 代表与正则式相匹配的文本,$` 代表位于匹配字串左侧的文本,$' 代表位于匹配字串右侧的文本,$$ 为直接量$
    例如,想用花引号代替直引号,可用如下代码:
    text.replace(/"([^"])*"/g, "``$1''")
    另外,replacement也可是函数,传入的参数就是匹配的文本,返回替换的文本即可。
    例如,将文本中每个单词的首字母改为大写字母:
    text.replace(/\b\w+\b/g, function(word){return word.substr(0,1).toUpperCase()+word.substr(1);})
    3、match(RegExp)
    无匹配时返回null, 否则返回一个数组,该数组的内容取决于正则式是否具备全局属性g。如果没有全局属性g,则match的返回值和exec的返回值类似。如果具有全局属性g,则返回数组代表的是所有匹配的文本,而不含有任何子表达式匹配的信息,也没有index和input属性
    4、split(delimiter, limit)
    返回一个字符串数组,这些数组元素是通过从头到尾检索字符串中与delimiter相匹配的文本,在文本之前和之后分割原string得到,返回的子串中不包括定界符文本(注:当delimiter是包含子表达式的正则式时,返回数组中将包含与子表达式相匹配的文本,但是不包含与整个正则式相匹配的文本)。如果定界符与字符串的开头相匹配,则返回数组的第一个元素是空串;如果定界符与字符串结尾相匹配,则数组的最后一个元素是空串(注:如果delimiter是空串或与空串相匹配的正则式,那么字符串的每个字符之间都被分割,返回数组长度与原字符串长度一致,因为空串不匹配字符串的开头或结尾!
    例如:"Hello<b>world</b>".split(/(<[^>]*>)/)
    返回 ['Hello ', '<b>', 'world', '</b>', ''])。

    <script language="JavaScript">
    function CheckForm()
    {
    if (document.alipayment.TxtSubject.value.length == 0) {
    alert("请输入商品名称.");
    document.alipayment.TxtSubject.focus();
    return false;
    }
    if (document.alipayment.TxtTotal_fee.value.length == 0) {
    alert("请输入付款金额.");
    document.alipayment.TxtTotal_fee.focus();
    return false;
    }
    var reg = new RegExp(/^\d*\.?\d{0,2}$/);
    if (! reg.test(document.alipayment.TxtTotal_fee.value))
    {
    alert("请正确输入付款金额");
    document.alipayment.TxtTotal_fee.focus();
    return false;
    }
    if (Number(document.alipayment.TxtTotal_fee.value) < 0.01) {
    alert("付款金额金额最小是0.01.");
    document.alipayment.TxtTotal_fee.focus();
    return false;
    }
    function getStrLength(value){
    return value.replace(/[^\x00-\xFF]/g,'**').length;
    }
    if(getStrLength(document.alipayment.TxtBody.value) > 200){
    alert("备注过长!请在100个汉字以内");
    document.alipayment.TxtBody.focus();
    return false;
    }
    if(getStrLength(document.alipayment.TxtSubject.value) > 256){
    alert("标题过长!请在128个汉字以内");
    document.alipayment.TxtSubject.focus();
    return false;
    }

    document.aplipayment.TxtBody.value = document.aplipayment.TxtBody.value.replace(/\n/g,'');
    }

    </script>

    ^/d+(\.\d{1,2})?$

  • 相关阅读:
    my first android test
    VVVVVVVVVV
    my first android test
    my first android test
    my first android test
    ini文件
    ZZZZ
    Standard Exception Classes in Python 1.5
    Python Module of the Week Python Module of the Week
    my first android test
  • 原文地址:https://www.cnblogs.com/zwei1121/p/745356.html
Copyright © 2011-2022 走看看