8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

当我期望一个匹配时,RegExp 的 match() 返回包含两个匹配的数组

Dan Puzey 2月前

24 0

考虑以下示例:let str = \'filename.jpg\';let pattOne = /\.[^\.]*$/;let pattTwo = /(\.[^\.]*$)/;let pattThree = /(\.[^\.]*$)/g;document.writeln(str.match(pattOne));document.

请考虑以下示例:

let str = "filename.jpg";

let pattOne = /\.[^\.]*$/;
let pattTwo = /(\.[^\.]*$)/;
let pattThree = /(\.[^\.]*$)/g;

document.writeln(str.match(pattOne));
document.writeln(str.match(pattTwo));
document.writeln(str.match(pattThree));
<pre>

结果如下:

.jpg
.jpg,.jpg
.jpg

我期望这个结果:

.jpg
.jpg
.jpg

为什么在正则表达式两边加上括号会改变结果?为什么使用 'g' 修饰符又会改变结果?

帖子版权声明 1、本帖标题:当我期望一个匹配时,RegExp 的 match() 返回包含两个匹配的数组
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Dan Puzey在本站《regex》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 来自 String.prototype.match [MDN] :

    如果正则表达式不包含标志 g ,则返回与 regexp.exec(string) .

    RegExp.prototype.exec 文档 [MDN] RegExp.prototype.exec documentation [MDN] 写道:

    返回的数组以匹配的文本作为第一项,然后每个匹配的捕获括号都有一个项包含所捕获的文本。

    因此,当您在第二个表达式中引入捕获组时,第一个元素是整个匹配,第二个元素包含捕获组的内容,在您的示例中,它也是整个匹配。
    第一个表达式没有捕获组,因此您只能得到匹配项。

    返回 match 文档:

    如果正则表达式包含 g 标志,则该方法返回包含所有匹配项的数组。如果没有匹配项,则该方法返回 null .

    使用 g 修饰符时,仅返回匹配项,而不返回捕获组的内容。您的字符串中只有一个匹配项。

  • .match() 函数返回一个数组。 document.write() 将数组打印为字符串。

    当你在字符串中捕获一个组时,它会生成一个如下数组:

    Array(
      [0] => 'the complete matched string',
      [1] => 'the first captured group',
      [2] => 'the second captured group', 
      [.] => '...'
    )
    

    因此,使用正则表达式,它变成:

    Array(
      [0] => '.jpg', // You match .jpg of the string
      [1] => '.jpg' // You captured the .jpg match
    )
    

    如果您打印一个数组,它会 , 在值之间放置一个。

  • 答案是正确的,为了清楚起见:捕获组匹配是因为添加了括号。当您想处理某些子匹配时,这很有用。例如,这是可能的:var pattOne = new RegExp('\.([^\.]*)$'); 比该组仅包含文件扩展名而没有点。

返回
作者最近主题: