当前位置: 首页 > 编程日记 > 正文

JavaScript中的正则表达式解析

正则表达式(regular expression)对象包含一个正则表达式模式(pattern)。它具有用正则表达式模式去匹配或代替一个字符串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。 要为一个单独的正则表达式添加属性,可以使用正则表达式构造函数(constructor function),无论何时被调用的预设置的正则表达式拥有静态的属性(the predefined RegExp object has static properties that are set whenever any regular expression is used, 我不知道我翻得对不对,将原文列出,请自行翻译)。

创建:
一个文本格式或正则表达式构造函数
文本格式: /pattern/flags
正则表达式构造函数: new RegExp("pattern"[,"flags"]);
参数说明:
pattern -- 一个正则表达式文本
flags -- 如果存在,将是以下值:
g: 全局匹配
i: 忽略大小写
gi: 以上组合
[注意] 文本格式的参数不用引号,而在用构造函数时的参数需要引号。如:/ab+c/i new RegExp("ab+c","i")是实现一样的功能。
在构造函数中,一些特殊字符需要进行转意(在特殊字符前加"\")。如:re = new RegExp("\\w+")

正则表达式中的特殊字符

字符 含意
\ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。

^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1...$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[\b] 匹配一个退格符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

说了这么多了,我们来看一些正则表达式的实际应用的例子:

E-mail地址验证:
function test_email(strEmail) {
var myReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
if(myReg.test(strEmail)) return true;
return false;
}
HTML代码的屏蔽
function mask_HTMLCode(strInput) {
var myReg = /<(\w+)>/;
return strInput.replace(myReg, "<$1>");
}

正则表达式对象的属性及方法
  预定义的正则表达式拥有有以下静态属性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。
其中input和multiline可以预设置。其他属性的值在执行过exec或test方法后被根据不同条件赋以不同的值。
许多属性同时拥有长和短(perl风格)的两个名字,并且,这两个名字指向同一个值。(JavaScript模拟perl的正则表达式)

正则表达式对象的属性 属性 含义
$1...$9 如果它(们)存在,是匹配到的子串
$_ 参见input
$* 参见multiline
$& 参见lastMatch
$+ 参见lastParen
$` 参见leftContext
$’          参见rightContext
constructor    创建一个对象的一个特殊的函数原型
global       是否在整个串中匹配(bool型)
ignoreCase     匹配时是否忽略大小写(bool型)
input        被匹配的串
lastIndex     最后一次匹配的索引
lastParen     最后一个括号括起来的子串
leftContext    最近一次匹配以左的子串
multiline     是否进行多行匹配(bool型)
prototype     允许附加属性给对象
rightContext    最近一次匹配以右的子串
source       正则表达式模式
lastIndex     最后一次匹配的索引


正则表达式对象的方法
方法 含义
compile      正则表达式比较
exec        执行查找
test        进行匹配
toSource      返回特定对象的定义(literal representing),其值可用来创建一个新的对象。重载Object.toSource方法得到的。
toString      返回特定对象的串。重载Object.toString方法得到的。
valueOf      返回特定对象的原始值。重载Object.valueOf方法得到

例子
Smith, John
将输出"Smith, John"

转载自 闪动联盟http://www.85flash.com/Get/JavaScript/2006-3-28/180633705_2.htm

转载于:https://www.cnblogs.com/pyt5208/archive/2007/11/03/947775.html

相关文章:

Markdown上下标内容多于一项

用{ }括起来。转载于:https://www.cnblogs.com/144823836yj/p/10261391.html

详述FileUpload 控件上传单文件

第一步&#xff1a;添加两个Label控件&#xff0c;一个是用于标题显示&#xff0c;一个是用于上传完成消息提示。 第二步&#xff1a;创建一个FileUpload控件到Page页面&#xff0c;注意FileUpload控件本身只提供文件的选举操作&#xff0c;而实际的文件上传功能需要我们创建一…

基于μC/OS—III的CC1120驱动程序设计

基于μC&#xff0f;OS—III的CC1120驱动程序设计 时间&#xff1a;2014-01-21 来源&#xff1a;电子设计工程 作者&#xff1a;张绍游&#xff0c;张贻雄&#xff0c;石江宏关键字&#xff1a;CC1120 嵌入式操作系统 STM32F103ZE 驱动设计 摘要&#xff1a;本文根据实…

LinkQueue的基本创建

队列是一种先进先出&#xff08;first in first out,缩写为FIFO&#xff09;的线性表。它只允许在表的一端进行插入&#xff0c;而在另一端进行删除元素。和平常我们排队打饭类似。 链队列是用链表表示的队列的简称。一个链队列需要两个分别指示队头和队尾的指针&#xff08;分…

请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同...

最笨的办法当然是二层嵌套循环&#xff0c;但觉得应该有更好的方法&#xff0c;但是着实想不出来&#xff0c;想听听大家的意见&#xff0c;大家帮帮小弟 i.e string[] A{"X","Y","Z","W"}; string[] B{"X","E",&…

超市账单管理系统之-------登录

报500的错大部分都是springmvc的jar包没有导对&#xff0c;最好用3点几的版本 。。。。在项目中要把包导对 pom.xml 所需要的jar包 1 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"2 xs…

进制转换converse

栈和队列是在软件设计中常用的两种数据结构&#xff0c;它们的逻辑结构和线性表相同。 其特点在于运算受到了限制&#xff1a;栈按“后进先出”的规则进行操作&#xff0c;队按“先进先出”的规则进行操作&#xff0c;故称运算受限制的线性表。 从数据类型的角度看: 它们和线…

40.多进程同步--锁--多把锁

多进程同步 首先多进程默认是并发行为&#xff0c;多个进程同时执行执行的顺序&#xff0c;以及何时执行完毕无法控制 多个进程如果涉及到了通信&#xff0c;数据的有序性无法保证需要锁来控制进程之间执行的顺序对于进程资源的控制缺点&#xff1a;同步进程&#xff0c;并发没…

.net导出到Excel与Word中(带上下标)

//输出到excel的函数,可直接copy到 cs页面privatevoidOutExcel(GridView dg, stringname) { dg.Visible true; Response.Clear(); Response.Buffer true; Response.Charset "GB2312"; name "attachment;filename&quo…

越来越不想写代码了

越来越不想写代码了今天刚下载了PD12版本&#xff0c;做了一个需求分析以及试用了几个新功能在对C&#xff03;支持的情况。感觉非常不错&#xff0c;特别是在代码生成方面&#xff0c;比我想的要好多了&#xff0c;而且比起其它语言的代码生成&#xff0c;好像就是对C&#xf…

【代码笔记】Web-CSS-CSS id和Class选择器

一&#xff0c;效果图。 二&#xff0c;代码。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>CSS id和class选择器</title> <style> #para1 { text-align: center; color: red; } .center { text-align: …

javascript取得鼠标的位置

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>JavaScript得到鼠标坐标<…

nginx缓存功能的设置

首先用的缓存是proxy_cache. 在http段里加入下列几句&#xff1a; [plain] view plaincopy proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_tem…

线性表List的基本创建

#include <iostream> using namespace std; #include <malloc.h> #include <stdio.h> #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define IINFEASIBLE -1 #define OVERFLOW -2 typedef int Status; /*类型名定义用status代替int;Sta…

点点看   只有想不到没有看不到

看了这些好看的图片&#xff0c;不禁也想把自己看到的图片与大家一起分享了&#xff01;[url]http://mm-nn.com.cn/MM[/url]网[url]http://haotupic.cn/[/url]好图片网[url]http://www.picguan.cn/[/url]美女图片馆[url]http://www.nvyoou.cn/[/url]女友网[url]http://www.soft…

二叉树的基本应用知识总结

#include <iostream> using namespace std; #include <malloc.h> #include <stdio.h> #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define IINFEASIBLE -1 #define OVERFLOW -2#define MAX_TREE_SIZE 100//二叉树的最大结点数 typedef ch…

JS原生选项卡 – 幻灯片效果

1 <!DOCTYPE HTML>2 <html>3 <head>4 <meta charset"utf-8">5 <title>JS实现幻动片选项卡</title>6 </head>7 <style>8 .container{9 text-align:center; 10 width:100%; 11 } 12 13 .ppt{ …

MSSQL 2008里事务的一个问题

今天在试MSSQL2008里的事务&#xff0c;发现如果事务中某条语句的表名错误&#xff0c;就无法用error或try回滚&#xff0c;具体如下&#xff1a;begin tran delete from test where id 5 --正确语句 dealete from testa where id1 4 --表名错误&#xff0c;testa 表…

避免在JSP中写java代码

作者&#xff1a;蜗牛学院CTO李懿老师 ​自从十年前的taglibs&#xff08;如JSTL&#xff09;和EL&#xff08;表达语言&#xff0c;这些事情&#xff09;诞生以来&#xff0c;在JSP中使用scriptlet&#xff08;<% %>这些东西&#xff09;的确是非常不鼓励的。 小脚本的主…

爱情也许是最忧伤的童话

也许爱情是一部忧伤的童话 惟其遥远与真实 惟其不可触摸与欠缺 方可成就起璀璨与神圣 或许&#xff0c;只有在难得最远的时候&#xff0c; 才能把曾经走过的那段日子 看得最真切、最清楚 放弃一个很爱你的人&#xff0c;并不痛苦 放弃一个你很爱的人&#xff0c;那才痛苦 爱…

Docker最全教程——从理论到实战(六)

Docker最全教程——从理论到实战&#xff08;六&#xff09; 原文:Docker最全教程——从理论到实战&#xff08;六&#xff09;托管到腾讯云容器服务 托管到腾讯云容器服务&#xff0c;我们的公众号“magiccodes”已经发布了相关的录屏教程&#xff0c;大家可以结合本篇教程一起…

c#中分割字符串的几种方法

第一种方法&#xff1a;打开vs.net新建一个控制台项目。然后在Main()方法下输入下面的程序。 string s"abcdeabcdeabcde"; string[] sArrays.Split(c); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果:ab deab deab de 我们看到了结果…

对相机所看的视角截屏保存为图片

对相机所看的视角截屏保存为图片&#xff1a; 1 using UnityEngine;2 using System.Collections;3 using UnityEngine.UI;4 /// <summary>5 /// 对相机截图6 /// </summary>7 public class Jietu : MonoBehaviour {8 9 public Camera camera; 10 Texture2D…

fsum函数测试以及分析

#include <stdio.h> #include <stdlib.h> #include <string.h>#define BUFSIZE 256//这是一句预定义&#xff0c;定义BUFSIZE的值是100&#xff0c;是缓冲空间的大小,作为数组的。int main(int argc, char *argv[]) //第一个int argc&#xff0c;是记录你输入…

oracle学习总结二(转义字符)

1、oracle 特殊字符 转义关键词&#xff1a; oracle 转义 环境&#xff1a;oracle 9i plsql在plsql里边执行:update userinfo set pageurlmyjsp?page1&pagesize10 where idtest这条sql语句往数据库的pageurl字段放进去了一…

C语言——冒泡法排序应用

#include <stdio.h> #include <stdlib.h> int main()/*有int main 就会有return 0;如果是void main ,就不用加上return 0了 */ {int i,j,temp;/*待会要用到&#xff0c;所以先定义,因为输入的都是整数&#xff0c;所以用int整数型*/int a[10];/*定义一个一维整型数…

2017 Multi-University Training Contest 3 hdu 6063

HDU 6063 思路&#xff1a; AC代码&#xff1a; #include "iostream" #include "string.h" #include "stack" #include "queue" #include "string" #include "vector" #include "set" #include "m…

[学习]GridView 学习集合 -- GridView中使用超链接的技巧

GridView中使用超链接的技巧 数据绑定方式有两种&#xff0c;如下示例&#xff1a; Eval方式 &#xff1c;%# Eval("id") %&#xff1e; Bind方式 &#xff1c;%# Bind("id","~/info.aspx?id{0}") %&#xff1e; 推荐使用第一种方式&#xff0c…

C# http 性能优化500毫秒到 60 毫秒

来源&#xff1a;https://www.cnblogs.com/hnsongbiao/p/9815808.html 偶然发现 C# 的 HttpRequest 要比 Chrome 请求同一Url 慢好多。C# HttpRequest 要500毫秒 而Chrome 只需要 39ms。 后来 整理 各种方法做了优化 HttpWebRequest request WebRequest.Create(address) as H…

一个计算机高手的成长(转)

这些日子我一直在写一个实时操作系统内核&#xff0c;已有小成了&#xff0c;等写完我会全部公开&#xff0c;希望能 够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 &#xff0c;所以把我的经历写出来与大家共勉&#xff0c;希望能给刚如行…