Als ik een string heb met een willekeurig type niet-alfanumeriek teken erin:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
Hoe krijg ik een versie zonder interpunctie in JavaScript:
"This is an example of a string with punctuation"
Antwoord 1, autoriteit 100%
Als je specifieke interpunctie uit een tekenreeks wilt verwijderen, is het waarschijnlijk het beste om expliciet te verwijderen wat je wilt, zoals
replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"")
Als u het bovenstaande doet, wordt de tekenreeks nog steeds niet geretourneerd zoals u deze hebt opgegeven. Als je extra spaties wilt verwijderen die zijn overgebleven na het verwijderen van gekke interpunctie, dan wil je zoiets doen als
replace(/\s{2,}/g," ");
Mijn volledige voorbeeld:
var s = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var punctuationless = s.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
var finalString = punctuationless.replace(/\s{2,}/g," ");
Resultaten van het uitvoeren van code in de Firebug-console:
Antwoord 2, autoriteit 68%
str = str.replace(/[^\w\s]|_/g, "")
.replace(/\s+/g, " ");
Verwijdert alles behalve alfanumerieke tekens en witruimte, en vouwt vervolgens meerdere aangrenzende witruimten samen tot enkele spaties.
Gedetailleerde uitleg:
\w
is een willekeurig cijfer, letter of onderstrepingsteken.\s
is een willekeurige spatie.[^\w\s]
is alles dat geen cijfer, letter, spatie of onderstrepingsteken is.[^\w\s]|_
is hetzelfde als #3, behalve dat de underscores weer zijn toegevoegd.
Antwoord 3, autoriteit 32%
Dit zijn de standaard leestekens voor US-ASCII: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Voor Unicode-interpunctie (zoals gekrulde aanhalingstekens, em-streepjes, enz.), kunt u eenvoudig overeenkomen met specifieke blokbereiken. Het blok Algemene interpunctieis \u2000-\u206F
en het blok Aanvullende interpunctieis \u2E00-\u2E7F
.
Samengevoegd en correct escaped, krijg je de volgende RegExp:
/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/
Dat moet overeenkomen met vrijwel alle leestekens die je tegenkomt. Dus, om de oorspronkelijke vraag te beantwoorden:
var punctRE = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/g;
var spaceRE = /\s+/g;
var str = "This, -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
str.replace(punctRE, '').replace(spaceRE, ' ');
>> "This is an example of a string with punctuation"
US-ASCII-bron: http://docs. oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Unicode-bron: http://kourge.net/projects/regexp-unicode-block