Regex dla \n działa inaczej

0

Cześć!

Usiłuję otrzymać takie samo działanie jak poniżej, gdzie _ jest enterem:

console.log(/^(.*)_(.+?)_$/g.exec("one_two_three_four_"));
0: "one_two_three_four_"
1: "one_two_three"
2: "four"

Dla enterów regex nie może się dopasować:

console.log(/^(.*)\n(.+?)\n$/g.exec("one\ntwo\nthree\nfour\n"));
null

Kompletnie nie mam pojęcia co jest nie tak :(
Co jest nie tak?

1

Symbol ^ na początku oraz $ na końcu wskazują, że regex musi pasować do całego tekstu.
Drugi przykład, w przeciwieństwie do pierwszego, nie działa, ponieważ kropka może reprezentować dowolny znak z wyjątkiem nowej linii.
Dlatego regex przyjmie tylko te stringi, które składają się z jakiegoś ciągu znaków bez entera, następnie enter, następnie znowu ciąg znaków i kończy się enterem:
CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER
Z kolei dany przez ciebie ciąg znaków wygląda następująco:
CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER - CIĄG ZNAKÓW - ENTER
A że jak napisałem na początku, regex musi pasować do całego tekstu przez użycie ^$, nic nie znajduje.

Pierwszy przykład zadziałał, ponieważ podkreślenie _ zostało uznane przez kropkę jako dowolny znak.

Możesz pobawić się tutaj:
https://regex101.com/
Zauważysz, że twój drugi przykład po usunięciu $ i/lub ^ zaczyna działać, i to na różne sposoby.

0

Ogarnięte:

console.log(/^([\s\S]*)\n(.+?)\n$/g.exec("one\ntwo\nthree\nfour\n"));

1 użytkowników online, w tym zalogowanych: 0, gości: 1