javascript和php的正则表达式有区别吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript和php的正则表达式有区别吗相关的知识,希望对你有一定的参考价值。

如题

参考技术A 所有语言中的正则表达式都是极其相似,有的只是做了少许改动
javascript和php的正则表达式是有区别的
比如
javascript 换行用\n
php 换行用\r\n本回答被提问者采纳

javascript中的正则表达式学习

一、前言

  关于正则表达式自身的语法这里不做过多介绍(详情可参见http://www.php100.com/manual/unze.html),这里仅仅解释javascript中和正则表达式相关的几个方法的使用。

二、javascript中的RegExp对象

  在javascript中,有两种方法可以构建正则:

    正则表达式字面量

    RegExp构造器

  RegExp对象有以下属性:

    global:如果标识g,则为true

    ignoreCase:如果标识i被使用,则为true

    lastIndex:下一次exec匹配开始的索引,初始值为0

    multiline:如果标识m被使用,则为true

    source:正则表达式源文本

三、正则表达式中的特殊需转义的字符

  在正则表达式字面量中,如果希望下面的字符按照字面进行匹配:

    /  \  [  ]  (  )  {  }  ?  +  *  |  .  ^  $

  必须要用一个\前缀进行转义。如果拿不准的话,可以个任何特殊字符都添加一个\前缀使其字面化。注意\前缀不能使字母或数字字面化。

四、javascript中可以操作正则表达式的相关方法

  在javascript中,可以处理正则表达式的方法有:

    regexp.exec

    regexp.test

    string.match

    string.replace

    string.search

    string.split

  下面重点介绍一下上述方法的用法:

  1.regexp.exec(string)

  exec方法是使用正则表达式的最强大(和最慢)的方法。如果它成功的匹配了string,会返回一个数组,数组中下标为0的元素将包含正则表达式regexp匹配的子字符串,下标1的元素是分组1捕获的文本...依次类推,除了数组元素和length属性外,exec还返回两个属性,index声明的是匹配文本的第一个字符的位置,input属性则存放的是被检索的字符串。如果匹配失败,会返回null。在调用非全局的regexp对象的exec方法时,返回的数组与调用方法string.match返回的数组是相同的。

  如果exep带有一个g表示,事情会变得负责,查找不是从这个字符的起始位置开始,而是从regexp.lastIndex(初始值为0)位置开始。如果匹配成功,那么regexp.lastIndex将被设置为该匹配后第一个字符的位置。这就意味着可以反复调用exec()来获得字符串中所有匹配文本,当再也找不到匹配的文本时,它将返回null,并会重置regexp.lastIndex为0.

  这就允许通过循环调用exec去查询一个匹配模式在一个字符串中发生了几次,有两件事需要注意。1.如果提前退出了循环,在此进入循环前必须把regexp.lastIndex重置为0;2.^因子仅匹配regexp.lastIndex为0的情况。

  具体可参见下面的案例:

 

var str=visit bobo bobo;
var patt=/bobo/g;
var result;
console.log(带有g标示的循环调用);
while((result=patt.exec(str))!=null){
    console.log(result);//第一次输出["bobo", index: 6, input: "visit bobo bobo"],第二次循环输出["bobo", index: 11, input: "visit bobo bobo"]
    //下一个匹配位置
    console.log(patt.lastIndex);//第一次输出10,第二次输出15
    //匹配文本的第一个位置

}

console.log(非手动退出循环时regexp.lastIndex的值);
console.log(patt.lastIndex);//输出0


console.log(不带g标示的exec);
var patt1=/bobo/;
var result1=patt1.exec(str);
console.log(patt1.lastIndex);//不带g标识的时候,每一次exec执行完毕,lastIndex都重置为0
console.log(result1);//["bobo", index: 6, input: "visit bobo bobo"]

 

   2.regexp.test(string)

  test方法是使用正则表达式最简单(和最快)的方法,如果匹配返回true,否则返回false。

r.test(string)等同于r.exec(string)!=null.不要对这个方法运用g标识。

  3.string.match(regexp)

  match方法让一个字符串和一个正则表达式进行匹配。它一句g标识来决定如何进行匹配。

  如果没有g标识,那么调用string.match(regexp)的结果与调用r.exec(string)的结果相同。仅仅执行一次匹配,如果没有找到任何匹配的文本,就返回null。否则返回一个数组,数组的第0个是匹配的文本,下标为1对应着捕获组1捕获的文本,...以此类推。此外,结果还具有index和input属性。分别表示匹配开始的下标和输入的文本。

  如果带有g表示,那么它执行全局检索,生成一个包含所有匹配(除捕获分组之外)的数组;若没有找到任何匹配的元素则返回null。全局匹配返回数组的内容与前者大不相同,数组中存放的是string的所有匹配子串,也没有index属性和input属性。

  在全局检索模式下,match即不提供子表达式匹配的文本的信息,也不声明匹配的位置,如果需要这些信息,可以使用regexp.exec()

 

  

 

 

以上是关于javascript和php的正则表达式有区别吗的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript与php中的正则表达式是不是一样的?

使用 python 和 javascript 的慢正则表达式,但在 go 和 php 中快速失败

Python 和 Javascript 正则表达式有啥不同?

Python和Javascript在评估正则表达式方面的区别

使 JavaScript 正则表达式等效于 PHP 正则表达式

将 Javascript 正则表达式转换为 PHP