Jeśli mam ciąg znaków zawierający dowolny typ znaku niealfanumerycznego:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
Jak uzyskać wersję bez interpunkcji w JavaScript:
"This is an example of a string with punctuation"
javascript
regex
Quentin Fisk
źródło
źródło
\s
) pojedynczą spacją. Jeśli chcesz, aby zwinąć dowolną liczbę białych znaków w dół do jednego, należy pozostawić poza górną granicę tak:replace(/\s{2,}/g, ' ')
.@+?><[]+
)replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. Jeśli ktoś szuka jeszcze nieco bardziej kompletnego zestawu.!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Która działa lepiej dla mnie, więc inną alternatywą byłoby:replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
Usuwa wszystko oprócz znaków alfanumerycznych i spacji, a następnie zwija wiele przylegających znaków do pojedynczych spacji.
Szczegółowe wyjaśnienie:
\w
to dowolna cyfra, litera lub podkreślenie.\s
to dowolna spacja.[^\w\s]
to wszystko, co nie jest cyfrą, literą, białą spacją ani podkreśleniem.[^\w\s]|_
jest taki sam jak # 3, z wyjątkiem tego, że podkreślenia zostały ponownie dodane.źródło
wouldn't
idon't
Oto standardowe znaki interpunkcyjne dla US-ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
W przypadku znaków interpunkcyjnych Unicode (takich jak cudzysłowy, myślniki pauzy itp.) Można łatwo dopasować określone zakresy bloków. Blok Ogólna interpunkcja to
\u2000-\u206F
, a blok Dodatkowa interpunkcja to\u2E00-\u2E7F
.Po złożeniu i poprawnej ucieczce otrzymasz następujące wyrażenie RegExp:
To powinno pasować prawie do każdej napotkanej interpunkcji. Tak więc, odpowiadając na pierwotne pytanie:
Źródło US-ASCII: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Źródło Unicode: http://kourge.net/projects/regexp-unicode-block
źródło
/ [^ A-Za-z0-9 \ s] / g powinno pasować do wszystkich znaków interpunkcyjnych, ale zachować spacje. Możesz więc użyć
.replace(/\s{2,}/g, " ")
do zastąpienia dodatkowych spacji, jeśli musisz to zrobić. Możesz przetestować wyrażenie regularne na http://rubular.com/Aktualizacja : działa tylko wtedy, gdy dane wejściowe są w języku angielskim ANSI.
źródło
Natknąłem się na ten sam problem, to rozwiązanie załatwiło sprawę i było bardzo czytelne:
Wynik:
Sztuczka polegała na stworzeniu zanegowanego zestawu . Oznacza to, że pasuje do wszystkiego, co nie znajduje się w zestawie, tj.
[^abc]
- nie a, b lub c\W
nie jest słowem, więc[^\W]+
zaprzeczy wszystko, co nie jest słowem char .Dodając _ (podkreślenie), możesz również temu zaprzeczyć.
Spraw, aby obowiązywała globalnie
/g
, a następnie możesz przeciągnąć przez niego dowolny ciąg i usunąć znaki interpunkcyjne:Ładnie i czysto;)
źródło
Po prostu wstawię to dla innych.
Dopasuj wszystkie znaki interpunkcyjne dla wszystkich języków:
Utworzono z kategorii znaków interpunkcyjnych Unicode i dodano kilka popularnych symboli klawiatury, takich jak
$
nawiasy i\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
podstawowa wymiana:
dodano \ s jako spację
dodano ^ do odwrócenia wzoru, aby dopasować nie interpunkcję, ale same słowa
w przypadku języka takiego jak hebrajski może usunąć „” pojedynczy i podwójny cudzysłów i zastanowić się nad tym.
używając tego skryptu:
Krok 1: wybierz w Firefoksie trzymając kontrolkę kolumnę liczb U + 1234 i skopiuj ją, nie kopiuj U + 12456 zastępują angielski
krok 2 (zrobiłem w chrome) znajdź obszar tekstowy i wklej go do niego, a następnie kliknij prawym przyciskiem myszy i kliknij sprawdź. wtedy możesz uzyskać dostęp do wybranego elementu za pomocą $ 0.
krok 3 skopiował pierwsze litery ascii jako oddzielne znaki, a nie zakresy, ponieważ ktoś mógłby dodać lub usunąć poszczególne znaki
źródło
W języku obsługującym Unicode właściwość znaku interpunkcji Unicode to
\p{P}
- którą zwykle można skrócić,\pP
a czasem rozszerzyć, aby zwiększyć\p{Punctuation}
czytelność.Czy używasz biblioteki wyrażeń regularnych zgodnej z Perl?
źródło
Jeśli chcesz usunąć znaki interpunkcyjne z dowolnego ciągu, powinieneś użyć
P
klasy Unicode.Ale ponieważ klasy nie są akceptowane w JavaScript RegEx, możesz wypróbować to wyrażenie regularne, które powinno pasować do wszystkich znaków interpunkcyjnych. Pasuje do następujących kategorii: Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So GeneralPunctuation SupplementalPunctuation CJKSymboleAndPunctuation Pismo klinowe Numery i interpunkcja.
Stworzyłem go za pomocą tego narzędzia online, które generuje wyrażenia regularne specjalnie dla JavaScript. Oto kod do osiągnięcia celu:
źródło
W przypadku ciągów en-US (amerykański angielski) powinno to wystarczyć:
Pamiętaj, że jeśli obsługujesz UTF-8 i znaki takie jak chiński / rosyjski i inne, to również je zastąpi, więc naprawdę musisz określić, czego chcesz.
źródło
jeśli używasz lodash
Ten przykład
źródło
Zgodnie z listą znaków interpunkcyjnych Wikipedii musiałem zbudować następujące wyrażenie regularne, które wykrywa znaki interpunkcyjne:
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
źródło
/
(najczęściej), to należy uciec się wewnątrz klasy postaci powyżej dodając back-slash, zanim coś takiego:\/
. Jest to jak byś go używać:"String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. Nawiasem mówiąc, nigdzie tam nie widzę znaku odwrotnego znaku (`), dlaczego?Jeśli chcesz zachować tylko alfabety i spacje, możesz zrobić:
źródło
To zależy od tego, co próbujesz zwrócić. Użyłem tego ostatnio:
źródło