W jaki sposób wydzielić tekst owinięty innym tekstem?

0

Załóżmy, że mam dowolny ciąg znaków, a w pewnym momencie mam include('path.to.file') i dowolny ciąg znaków. Potrzebuję wydzielić z tego path.to.file. Proszę Was o pomoc, bo niestety mimo usilnych prób nie umiem sobie poradzić.

1

https://regex101.com/r/xX0sD4/1
Spróbuj coś takiego, najpierw jest tekst include, potem (, ale ponieważ ( występuje w składni regexów, musisz poprzedzić go ukośnikiem . To samo z apostrofem. Potem następuje tekst, w którym mogą wystąpić dowolną liczbę razy, znaki a-zA-Z lub kropka. Tekst objąłem w nawias zwykły, aby dało się go wyjąć. Koncówka oczywiście powtórka z historii.
Kod w js pozwalający na wyciągninęcie ścieżki

var expr = /include\(\'([\.a-zA-Z]+)\'\)/;
var str = "include('path.to')";

var result = expr.exec(str)[1]

Kod źle się parsuje na forum, ale działa ok :D
Jeżeli w ścieżce może występować więcej znaków, możesz sobie użyć kropki zamiast tego [.a-zA-Z].
/include\(\'(.+)\'\)/
Inny problem to różne typy cudzysłowów. Jak masz pewność że zawsze będą pojedyńcze to możesz zostawić. W przyciwnym przypadku powinieneć dać
/include\([\'\"](.+)[\'\"]\)/

0

Dzięki bardzo za odpowiedź, ale niestety samym regexem w moim przypadku chyba nic nie zwojuję. Rozszerzam parser do templateów, więc do tego wszystkiego musiały się jeszcze zgadzac nawiasy (otwierający, zamykający), a zagnieżdżenie tablic może być dowolne (include przyjmuje argumenty), więc niestety ale jednolinijkowiec w postaci regexa tym razem musiał ustąpić ;)

Temat może ktoś oznaczyć jako zakończony (zapomniałem się zalogować..)

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