我有一段正则表达式从文本中解析出一个表单,正则表达式变为/\[\[(?:.*(?:(?:(?:_:v=(.*))|o|x):s=(\d))|(h=(\d)))?\]\]/g
,并且应该匹配(以后在每次匹配时都使用/ g进行分组)信息的格式为[[((o|x|_v:=*answer*):s=*points*)|(h=*points*)]]
该信息的真实示例:
"https://asiointi.maanmittauslaitos.fi/karttapaikka/Etsi Karttapaikka-
palvelusta Forssan maastokartta ja tee tehtävät (voi tehdä pareittain).
Klikkaa + ja - näppäimiä, kun etsit paikkojen nimiä ja karttamerkkejä.1.
Etsi Pyhäjärven Similänlahti.a) Millaista metsää sen rannalla on?
[[_:v=lehtimetsä:s=1:t=]]b) Mitä on kohdassa, jossa lukee Urpola?
[[_:v=pelto:s=1:t=]]2. Kuinka korkea on Korkeavahan korkein kohta?
[[_:v=135:s=1:t=]] metriä.3. Kuinka pitkä matka on Kuhalan koululta
linnuntietä (lähtö yläkoulun pihalta, klikkaa viivoitin-kuvaketta, alku-
ja loppupiste kaksoisklikkaus, tyhjennä kartta mittausten välillä)a)
Keskurille?[[o:s=0]] 500 m[[o:s=0]] 600 m[[o:s=0]] 700 m[[o:s=0]] 800
m[[o:s=1]] 900 mb) Tölölle?[[o:s=0]] 500 m[[o:s=0]] 600 m[[o:s=1]] 700
m[[o:s=0]] 800 m[[o:s=0]] 900 m4. Lisää kartalle oma merkintä. Merkitse
kotitalosi otsikolla esim. Kullervon koti."
它匹配从第一个[[到最后一个]]的所有内容,即使它应该是惰性的。为什么是这样?
编辑:我想要的
我希望它能给我完整的比赛清单,例如
[[_:v=lehtimetsä:s=1:t=]]
[[_:v=pelto:s=1:t=]]
[[_v:=135:s=1:t=]]
[[o:s=0]]
...
答案 0 :(得分:0)
尝试一下:
/\[\[(?:[ox]:|_:v=)[^\]]+\]\]/gi
结果:
Match 1
Full match 285-310 `[[_:v=lehtimetsä:s=1:t=]]`
Match 2
Full match 352-372 `[[_:v=pelto:s=1:t=]]`
Match 3
Full match 420-438 `[[_:v=135:s=1:t=]]`
Match 4
Full match 644-653 `[[o:s=0]]`
Match 5
Full match 659-668 `[[o:s=0]]`
Match 6
Full match 674-683 `[[o:s=0]]`
Match 7
Full match 689-698 `[[o:s=0]]`
Match 8
Full match 705-714 `[[o:s=1]]`
Match 9
Full match 731-740 `[[o:s=0]]`
Match 10
Full match 746-755 `[[o:s=0]]`
Match 11
Full match 761-770 `[[o:s=1]]`
Match 12
Full match 777-786 `[[o:s=0]]`
Match 13
Full match 792-801 `[[o:s=0]]`
说明:
\[\[ # Literal '[[' (must be scaped since [] are used for character classes)
(?: # 2 options (separated by |)
[ox]: # Option1: Either 'o' or 'x' character followed by ':'
|_:v= # Option2: Literal '_:v='
)
[^\]]+ # Any non-']' character repeated 1 or more times
\]\] # Literal ']]'
答案 1 :(得分:0)
您似乎想要这个:
var s = document.querySelector("pre").innerHTML.replace(/\n/g, "");
var matches = s.match(/\[\[((_:v=[^:\]]+)|o|x):s=(\d)(:t=\d?)?\]\]/g);
console.log(matches);
<pre>
https://asiointi.maanmittauslaitos.fi/karttapaikka/Etsi Karttapaikka-
palvelusta Forssan maastokartta ja tee tehtävät (voi tehdä pareittain).
Klikkaa + ja - näppäimiä, kun etsit paikkojen nimiä ja karttamerkkejä.1.
Etsi Pyhäjärven Similänlahti.a) Millaista metsää sen rannalla on?
[[_:v=lehtimetsä:s=1:t=]]b) Mitä on kohdassa, jossa lukee Urpola?
[[_:v=pelto:s=1:t=]]2. Kuinka korkea on Korkeavahan korkein kohta?
[[_:v=135:s=1:t=]] metriä.3. Kuinka pitkä matka on Kuhalan koululta
linnuntietä (lähtö yläkoulun pihalta, klikkaa viivoitin-kuvaketta, alku-
ja loppupiste kaksoisklikkaus, tyhjennä kartta mittausten välillä)a)
Keskurille?[[o:s=0]] 500 m[[o:s=0]] 600 m[[o:s=0]] 700 m[[o:s=0]] 800
m[[o:s=1]] 900 mb) Tölölle?[[o:s=0]] 500 m[[o:s=0]] 600 m[[o:s=1]] 700
m[[o:s=0]] 800 m[[o:s=0]] 900 m4. Lisää kartalle oma merkintä. Merkitse
kotitalosi otsikolla esim. Kullervon koti.
</pre>