捕获括号 - /(\ d)/?或/ \ s *; \ s * /?

时间:2017-02-09 23:38:20

标签: javascript arrays split

我正在阅读有关分割的内容,下面是一个查看字符串值的变量。但是我不明白这些符号在寻找什么。

根据页面:如果分隔符包含捕获括号,则在数组中返回匹配的结果。

    var myString = 'Hello 1 word. Sentence number 2.';
    var splits = myString.split(/(\d)/);

    console.log(splits);

    // Results 
    [ "Hello ", "1", " word. Sentence number ", "2", "." ]

我的问题是,这里发生了什么?括号"("或")"不是字符串的一部分。为什么是空间或"。"有些人而不是其他人分开了吗?

另一个是/ \ s *; \ s *

如果有0或更多空格,它会在前后删除分号。这是否意味着/ \ s *意味着它寻找一个空格并删除&#39 ;;'在这种情况下是分隔符?

  var names = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ';

  console.log(names);

  var re = /\s*;\s*/;
  var nameList = names.split(re);

  console.log(nameList);

  // Results
  ["Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand "]

如果是这样的话,如果我的字符串看起来像这样,那么为什么不在^符号之前和之后的空间中删除空格。

  var names = 'Harry Trump ^Fred Barney^ Helen Rigby ^ Bill Abel ^Chris Hand ';

  console.log(names);

  var re = /\s*^\s*/;
  var nameList = names.split(re);

  console.log(nameList);

我想知道这些符号的含义以及它们为何按某种顺序排列。谢谢你。

2 个答案:

答案 0 :(得分:1)

您似乎从here获得了示例。

首先让我们看看这个/(\d)/。 彻底解决,认识到\d逃脱了所有数字。 现在,从文章中,围绕转义包装括号告诉split方法保留返回数组中的分隔符(在本例中是任何数字)。请注意,如果没有括号,返回的数组将不具有数字元素(当然是字符串)。最后,它用斜杠(//)包装以创建regular expression。基本上这种情况说:用数字拆分字符串并保留返回数组中的数字。

第二种情况/\s*;\s*稍微复杂一点,需要对正则表达式有所了解。首先请注意\s逃离空间。在正则表达式中,后跟c的字符*表示'按连续顺序'查找c中的0个或更多个。所以这个正则表达式匹配像' ; '';'等字符串(我添加了单引号来显示空格)。请注意,在这种情况下,我们没有括号,因此分号将从返回的数组中排除。

如果你仍然陷入困境,我建议阅读正则表达式并练习写作。这个website很棒,只是要厌倦了这个网站上的正则表达式在语法方面可能与javascript中使用的表达式略有不同。

答案 1 :(得分:0)

下面的第一个例子将输入字符串拆分为任意数字,保留最终数组中的分隔符(即数字)。

下面的第二个例子表明,保留括号仍会将数组拆分为任何数字,但这些数字分隔符不包含在最终数组中。

下面的第3个示例在遇到以下模式时分割输入字符串:尽可能多的连续空格(包括无)紧跟一个分号后紧跟多个连续空格(包括无)。

下面的第4个示例显示您确实可以像第3个示例中那样拆分类似的输入字符串,但使用“^”替换“;”。但是,因为“^”本身意味着“字符串的开头”,你必须通过在它前面放一个反斜杠(即为此目的指定的特殊指示符)来告诉JavaScript找到实际的“^”,即“\ ^”。

const show = (msg) => {console.log(JSON.stringify(msg));};

var myString = 'Hello 1 word. Sentence number 2.';
var splits1 = myString.split(/(\d)/);
show(splits1);
var splits2 = myString.split(/\d/);
show(splits2);

var names1 = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ';
var nameList1 = names1.split(/\s*;\s*/);
show(nameList1);
var names2 = 'Harry Trump ^Fred Barney^ Helen Rigby ^ Bill Abel ^Chris Hand ';
var nameList2 = names2.split(/\s*\^\s*/);
show(nameList2);