JavaScript 正则表达式(RegExp对象、属性、方法、String支持)

内容来源:JavaScript RegExp 对象参考手册    http://www.w3school.com.cn/js/jsref_obj_regexp.asp

 

RegExp 对象

RegExp 对象属性

RegExp 对象方法

支持正则表达式的 String 对象的方法

 

 

RegExp 对象

RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。

直接量语法: /pattern/attributes

创建 RegExp 对象的语法:new RegExp(pattern, attributes);

参数
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

 

返回值
一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。

如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。

 

抛出
SyntaxError - 如果 pattern 不是合法的正则表达式,或 attributes 含有 "g"、"i" 和 "m" 之外的字符,抛出该异常。

TypeError - 如果 pattern 是 RegExp 对象,但没有省略 attributes 参数,抛出该异常。


 

RegExp 对象属性

global           RegExp 对象是否具有标志 g。

ignoreCase    RegExp 对象是否具有标志 i。

lastIndex       一个整数,标示开始下一次匹配的字符位置。

multiline         RegExp 对象是否具有标志 m。

source           正则表达式的源文本。


 

RegExp 对象方法

compile    编译正则表达式,也可用于改变和重新编译正则表达式。

exec        检索字符串中指定的值。返回找到的值,并确定其位置。

exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法以及支持正则表达式的 String 对象的方法更为复杂。


1、在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。

<script type="text/javascript">var str = "Visit W3School"; 
var patt = new RegExp("W3School","g");
var result;while ((result = patt.exec(str)) != null)  {document.write(result);document.write("<br />");document.write(result.lastIndex);}
</script>/*
输出:W3School
14
*/


2、如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。

此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式(圆括号引用正则表达式的某部分)相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推。

除了数组元素和 length 属性之外,exec() 方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input 属性则存放的是被检索的字符串 string。

var re = /(ds)+(j+s)/ig;
var str = "cfdsJS *(&dsjjjsYJSjs 888dsdsJS";
var resultArray = re.exec(str);
while (resultArray) {document.writeln(resultArray[0]);document.writeln("next match starts at " + re.lastIndex + "<br />");for (var i=1; i<resultArray.length; i++){document.writeln("substring of " + resultArray[i] + "<br />");}document.writeln("<br />")resultArray = re.exec(str);
}/*
输出:
dsJS next match starts at 6
substring of ds
substring of JSdsjjjs next match starts at 16
substring of ds
substring of jjjsdsdsJS next match starts at 31
substring of ds
substring of JS
*/


test         检索字符串中指定的值。如果含有指定的值返回 true ,否则返回 false。

调用 RegExp 对象 r 的 test() 方法,并为它传递字符串 s,与这个表示式是等价的:(r.exec(s) != null)。

<script type="text/javascript">
var str = "Visit W3School";
var patt1 = new RegExp("W3School");var result = patt1.test(str);document.write("Result: " + result);
</script>
/*
输出:Result: true
*/

 

支持正则表达式的 String 对象的方法

search    检索与正则表达式相匹配的值。

如果没有找到任何匹配的子串,则返回 -1。

要执行忽略大小写的检索,请追加标志 i。

search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

<script type="text/javascript">var str="Visit W3School!"
document.write(str.search(/w3school/i))</script>
/*
输出:6
*/


match    找到一个或多个正则表达式的匹配。

该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。

全局模式下建议使用 RegExp.exec() 代替本方法。


replace   替换与正则表达式匹配的子串。

stringObject.replace(regexp/substr,replacement

字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

字符                          替换文本
$1、$2、...、$99       与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&                             与 regexp 相匹配的子串。
$`                             位于匹配子串左侧的文本。
$'                              位于匹配子串右侧的文本。
$$                             直接量符号。

注意:ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

// 1、执行一次全局替换,每当 "Microsoft" 被找到,它就被替换为 "W3School":
<script type="text/javascript">var str="Welcome to Microsoft! "
str=str + "We are proud to announce that Microsoft has "
str=str + "one of the largest Web Developers sites in the world."document.write(str.replace(/Microsoft/g, "W3School"))</script>
/*
输出:Welcome to W3School! We are proud to announce that W3School
has one of the largest Web Developers sites in the world.例子 3
*///2、确保匹配字符串大写字符的正确:
text = "javascript Tutorial";
text.replace(/javascript/i, "JavaScript");//3、将把 "Doe, John" 转换为 "John Doe" 的形式:
name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");//4、把所有的花引号替换为直引号:
name = '"a", "b"';
name.replace(/"([^"]*)"/g, "'$1'");//5、把字符串中所有单词的首字母都转换为大写:
name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){return word.substring(0,1).toUpperCase()+word.substring(1);});


split       把字符串分割为字符串数组。

stringObject.split(separator,howmany)

howmany:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。

注释:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

注释:String.split() 执行的操作与 Array.join 执行的操作是相反的。

 

 

推荐文章:

MSDN JScript 8.0 正则表达式介绍  http://msdn.microsoft.com/zh-cn/library/28hw3sce

转载于:https://www.cnblogs.com/kiant71/archive/2010/08/08/1795177.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

入门物联网还得靠嵌入式

小米在十一周年的发布会上&#xff0c;展示了一个新产品&#xff1a;CyberDog仿生四足机器人“铁蛋”&#xff0c;继腾讯X实验室的四足机器人MAX后&#xff0c;小米也开始跨界入局尝试研制机器狗。2020年国家会议召开&#xff0c;加快推动新基建建设&#xff0c;各产业进行数字…

mysql中定时任务_mysql中定时任务的用法

1.什么是事件一组SQL集&#xff0c;用来执行定时任务&#xff0c;跟触发器很像&#xff0c;都是被动执行的&#xff0c;事件是因为时间到了触发执行&#xff0c;而触发器是因为某件事件(增删改)触发执行&#xff1b;mqsql的事件类似于linux的定时任务&#xff0c;不过是完全在m…

一文看懂 | 内存交换机制

本文基于 Linux-2.4.16 内核版本由于计算机的物理内存是有限的, 而进程对内存的使用是不确定的, 所以物理内存总有用完的可能性. 那么当系统的物理内存不足时, Linux内核使用什么方案来避免申请不到物理内存这个问题呢?相对于内存来说, 磁盘的容量是非常大的, 所以Linux内核实…

无论是cisco还是华三的书上对于子网划分有个问题需要解释

无论是cisco还是华三的书上对于子网划分有个问题&#xff0c;例如&#xff1a;如果子网为有五位 &#xff0c;则可以划分为30个子网。在实际中却不是这样的 子网位五位&#xff0c;可以划分为32个子网。那为什么这么写&#xff0c;难道是出书的人写错了&#xff0c;其实不是。这…

mysql online ddl 5.6_MySQL 5.6的Online DDL功能测试

online DDL的前身是 innodb fast index creation(5.1和5.5), 5.6里对这个功能做了扩展&#xff1a;很多alter table的操作绕开了 table copying&#xff0c;支持DML并发操作。一、online ddl的支持测试&#xff1a;1、主键的增删主键添加&#xff1a;支持online ddl&#xff0c…

Stupid cat Doge (分形图)

【题目描述】 【题目链接】 http://noi.openjudge.cn/ch0204/8463/ 【算法】 为求等级N下的点的坐标可由几何关系找到其与等级N-1下对应点的关系&#xff0c;然后递归直至所有点的祖先&#xff08;等级0&#xff09;即可计算出坐标。 【代码】 1 #include <bits/stdc.h>2…

电赛时,如何快速搭建电路?

大家好&#xff0c;我是张巧龙&#xff0c;电赛只有四天三夜&#xff0c;电路方案可能需要多次验证&#xff0c;有的同学选择直接洞洞板焊接&#xff0c;自行跳线。有些同学可能会选择雕刻机雕刻。我带的学生一般会使用传统工艺-腐蚀法&#xff0c;这种方法的优点&#xff0c;成…

船舶自动识别系统(AIS)

摘要&#xff1a;在对船载自动识别系统&#xff08;AIS&#xff09;的功能研究的基础之上&#xff0c;研究了对GPS&#xff0c;ECDIS&#xff0c;ARPA&#xff0c;VTS&#xff0c;VDR&#xff0c;CHISREP&#xff0c;航标&#xff0c;物流&#xff0c;船-岸信息网等航运及海事管…

mysql安装包脚本之家_CentOS 7 MySQL5.7 TAR包解压 全自动化脚本

准备工作tar安装包&#xff1a;默认已经下载好mysql 安装包&#xff0c;名称为&#xff1a; mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz &#xff0c;我的安装包位置&#xff1a;/root 。我服务器没有网络&#xff0c;只能通过sftp上传。安装位置&#xff1a;mysql程序安装路…

Javaweb经典三层架构的演变

1.Javaweb经历了三个时期 ①JSP Model1第一代 JSP Model1是JavaWeb早期的模型&#xff0c;它适合小型Web项目&#xff0c;开发成本低&#xff01;Model1第一代时期&#xff0c;服务器端只有JSP页面&#xff0c;所有的操作都在JSP页面中&#xff0c;连访问数据库的API也在JSP页面…

我决定去读研了

读书这个事情&#xff0c;我一直都是比较推荐大家去做的&#xff0c;今天有一位同学找到我&#xff0c;问我现在哪个行业比较赚钱&#xff0c;自己马上要毕业了&#xff0c;想马上大显身手一下。然后我问他&#xff0c;你有没有赚钱的压力&#xff0c;还有自己目前的学习成绩怎…

如何制定好的方案之四:执行力是决定因素

如何制定好的方案之三:实施策略是关键 执行力是决定因素。 前面从方案的目标、资源一直说到很关键的实施策略&#xff0c;这一切再完美最终的决定因素却是&#xff1a;执行力&#xff01;执行力在完整的方案中是要用明文规定来实现过程控制的目的的。这些明文的规定&#xff0…

win2008 php mysql zend phpmyadmin_Windows2008 最新版Apache2.PHP5.MySQL6.PHPMyadmin.ZendOptimizer安装图解...

首先到PHPCHINA的网站www.phpchina.com下载最新的正式版本Apache 2.2.8地址&#xff1a;http://apache.mirror.phpchina.com/httpd/httpd-2.2.8-win32-src.zipPHP-5.2.5地址&#xff1a;http://cn.php.net/get/php-5.2.5-Win32.zip/from/this/mirrorMySQL-6.0.3-alpha-win32地址…

WPF 开源项目 【watcher】 守望者,一款监控,统计,分析你每天在自己电脑上究竟干了什么的软件...

时隔多年&#xff08;两年&#xff09;&#xff0c;天天沉迷写PHP的我在连续加薪了逐渐发现自己不怎么写代码了。 甚至有一天我发现我连IDE 都没有打开&#xff0c;实在是太堕落了 为了及时悬崖勒马&#xff0c;回头是岸。为了鼓励自己专心写代码&#xff0c;我决定写一款监控自…

Java iText PDF:用 iText 包生成简单的 pdf 文件

有点兴趣想要看看 Java 怎么生成 PDF 文件&#xff0c;搜索了一下&#xff0c;据说 iText 包比较好&#xff0c;到 这里下载 iText.jar 包&#xff0c;顺便把源代码、文档都一起下载了吧。但是&#xff0c;仅仅有这么一些材料想要写代码生成 pdf 文件还是比较困难的&#xff0c…

java互换_两个变量交换的四种方法(Java)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下。 1.利用第三个变量交换数值,简单的方法。 (代码演示一下) 1 class TestEV 2 //创建一个类 3 {4 public static void main(String[]args) 5 {6 int x =5,y=10; //定义两个变量 7 8 int temp = x;    //定义第…

搞技术的,越老越吃香?越老越值钱?

在我的整个职业生涯中&#xff0c;我目睹了很多才华横溢的工程师经过一段不太愉快的短期任职后离开了公司。曾经我也有这样的经历&#xff1a;在一家公司任职不到两年&#xff0c;就跳槽到了另一家&#xff0c;担任工程副总裁。撇开我的例子不谈&#xff0c;我认为出现这种现象…

ubuntu 修改host,以便在本地调试

sudo gedit /etc/hosts这样已经可以即可生效了&#xff0c;另外再改一下nginx.confserver_name localhost www.15-1688.com;

java的两种方式_java 两种方式的区别?

成员函数方式package cn.com.ch09;class FatherTest{public void pet(String str){System.out.println(str);}}public class SonTest extends FatherTest {public void hitChild() {System.out.println("这是使用接口实现");}public static void main(String[] args)…

对存储还搞不清楚,先看看这篇文章-从51单片机上去理解存储器

存储器是许多存储单元的集合&#xff0c;存储器单元实际上是时序逻辑电路&#xff08;锁存器&#xff09;的一种&#xff0c;按单元号顺序排列。每个单元由若干二进制位构成&#xff0c;以表示存储单元中存放的数值&#xff0c;这种结构和数组的结构非常相似。按存储器的使用类…