我正在阅读有关分割的内容,下面是一个查看字符串值的变量。但是我不明白这些符号在寻找什么。
根据页面:如果分隔符包含捕获括号,则在数组中返回匹配的结果。
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);
我想知道这些符号的含义以及它们为何按某种顺序排列。谢谢你。
答案 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);