Myślę, że to proste pytanie.
Próbuję wyszukać wystąpienie ciągu w innym ciągu za pomocą wyrażenia regularnego w JavaScript, jak na przykład:
var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: ";
var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g");
if(content.search(gent) != -1){
alert('worked');
}
To nie działa z powodu ?
postaci ... Próbowałem uciec przed tym \
, ale to też nie działa. Czy istnieje inny sposób użycia ?
dosłownie zamiast znaku specjalnego?
javascript
regex
literals
Andrzej
źródło
źródło
str.search("?")
To zdecydowanie wygląda na błąd, ponieważ nie jest to wyrażenie regularne i nie powinno być traktowane jako jeden. 🤦Odpowiedzi:
Musisz uciec dwoma ukośnikami
Zobacz to, aby uzyskać więcej informacji:
http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm
źródło
Powinieneś użyć podwójnego ukośnika:
var regex = new RegExp("\\?", "g");
Czemu? ponieważ w JavaScript
\
jest również używany do zmiany znaczenia znaków w łańcuchach, więc: „\?” staje się:"?"
I
"\\?"
staje się"\?"
źródło
Możesz ograniczyć swoje wyrażenie regularne ukośnikami zamiast cudzysłowów, a następnie jednym lewym ukośnikiem, aby uniknąć znaku zapytania. Spróbuj tego:
var gent = /I like your Apartment. Could we schedule a viewing\?/g;
źródło
Ilekroć masz znany wzorzec (tj. Nie używasz zmiennej do budowy wyrażenia regularnego), użyj dosłownej notacji wyrażenia regularnego, w której wystarczy użyć pojedynczych odwrotnych ukośników, aby uniknąć specjalnych metaznaków wyrażenia regularnego:
var re = /I like your Apartment\. Could we schedule a viewing\?/g; ^^ ^^
Ilekroć potrzebujesz dynamicznie zbudować RegExp, użyj
RegExp
notacji konstruktora, w której MUSISZ podwójny ukośnik odwrotny, aby oznaczyć dosłowny ukośnik odwrotny :var questionmark_block = "\\?"; // A literal ? var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot var re = new RegExp(initial_subpattern + questionmark_block, "g");
A jeśli użyjesz
String.raw
literału ciągu, którego możesz użyć w\
takiej postaci, w jakiej jest (zobacz przykład użycia literału ciągu szablonu, w którym możesz umieścić zmienne we wzorcu wyrażenia regularnego):const questionmark_block = String.raw`\?`; // A literal ? const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g
Koniecznie przeczytaj: RegExp: Opis w MDN.
źródło