pattern = "p.class1.class2#id1";
regex = /#?|\.+/g;
pattern.match(regex) ;
//Outputs ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "#", "", "", "", ""]
//Now If I change regex to something like this
regex = /#|\.+/g ;
pattern.match(regex); //Then it gives the correct output
//Outputs [".", ".", "#"]
//Again If I change regex to something like this
regex = /\#|\.*/g;
pattern.match(regex); //Then it again shows the weird behavior
//Outputs ["", ".", "", "", "", "", "", "", ".", "", "", "", "", "", "", "#", "", "", "", ""]
//and at last with this regex combination
regex = /\#?|\.*/g;
pattern.match(regex) ; //Its agains outputs something odd
//Outputs ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "#", "", "", "", ""];
我实际需要从给定的#
字符串中打印.
和pattern
的正确顺序,其中
# : Is optional i.e repeat 0 or 1 times
. : Would repeat 0 or more times
由于# and .
可以按照模式中的任何顺序出现,而且我想要的是打印正确的顺序a / c到它们在字符串中的出现,所以不能依赖()
<在这种情况下,强>捕获群组。
更多模式是:
pattern_1 = "p#id.class1.class2"` `//Correct output ['#','.','.']
pattern_2 = ".class1#id.class2"` `//Correct output ['.','#','.']
pattern_3 = ".class1.class2"` `//Correct output ['.','.']
我使用regex = /#|\.+/g
获取此输出但不知道当我使用这些regex = /#?|\.+/g
或 regex = /#?|\.*/g
时发生了什么
请解释一下。
答案 0 :(得分:2)
#?
匹配字符串中的每个位置,因为空字符串仍被视为匹配。 .
匹配#?
之前匹配\.
,最后会得到空字符串的结果,如果有空字符串则会产生哈希值。
如果您正在尝试解析CSS选择器,请不要使用正则表达式。只需编写自己的解析器。