如果我有一个字符串,其中有任何类型的非字母数字字符:

"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"

我如何在JavaScript中得到一个没有标点符号的版本:

"This is an example of a string with punctuation"

当前回答

它很简单,只是替换字符而不是单词:

.replace(/[^\w]/g, ' ')

其他回答

它很简单,只是替换字符而不是单词:

.replace(/[^\w]/g, ' ')

如果你的目标是一个现代浏览器(不是IE),你可以使用unicode字符类。当您还需要支持诸如德语Umlaute (äöü)或其他字符时,这尤其有用。

这是我最后得到的。它替换所有不是字母、撇号或空格的内容,并用一个空格删除行中的多个空格。

const textStripped = text
  .replace(/[’]/g, "'") // replace ’ with '
  .replace(/[^\p{Letter}\p{Mark}\s']/gu, "") // remove everything that is not a letter, mark, space or '
  .replace(/\s+/g, " ") // remove multiple spaces
.replace(/[’]/g, "'")

First将'(印刷撇号)替换为'(打字机撇号)。因为两者都可以用在像"don 't "这样的词中

.replace(/[^\p{Letter}\p{Mark}\s']/gu, "")

\p{Letter}代表unicode中被归类为字母的任何字符。

\p{Mark}类别需要包括进一步的封面字母标记组合。例如,德语ä可以编码为单个字符,也可以编码为“a”和“Mark”的组合。当从pdf中复制德语文本时,这种情况经常发生。

来源: https://dev.to/tillsanders/let-s-stop-using-a-za-z-4a0m

str = str.replace(/[^\w\s\']|_/g, "")
         .replace(/\s+/g, " ");

删除除字母数字字符和空白之外的所有内容,然后将多个相邻空白折叠为单个空格。

详细解释:

\w是任意数字、字母或下划线。 \s是任何空白。 [^\w\s\']是指任何不是数字、字母、空格、下划线或单引号的字符。 [^\w\s\']|_与#3相同,只是加了下划线。

对于en-US(美式英语)字符串,这应该足够了:

"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation".replace( /[^a-zA-Z ]/g, '').replace( /\s\s+/g, ' ' )

注意,如果你支持UTF-8和像chinese/russian这样的字符,这也会替换它们,所以你真的必须指定你想要什么。

如果你想从任何字符串中删除标点符号,你应该使用P Unicode类。

但是,由于JavaScript RegEx不接受类,您可以尝试这个RegEx,它应该匹配所有的标点符号。它匹配以下类别:Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So一般标点符号补充标点符号CJKSymbolsAndPunctuation cuneiformnumber和punctuation。

我使用这个在线工具创建了它,它专门为JavaScript生成正则表达式。 这是实现你目标的代码:

var punctuationRegEx = /[!-/:-@[-`{-~¡-©«-¬®-±´¶-¸»¿×÷˂-˅˒-˟˥-˫˭˯-˿͵;΄-΅·϶҂՚-՟։-֊־׀׃׆׳-״؆-؏؛؞-؟٪-٭۔۩۽-۾܀-܍߶-߹।-॥॰৲-৳৺૱୰௳-௺౿ೱ-ೲ൹෴฿๏๚-๛༁-༗༚-༟༴༶༸༺-༽྅྾-࿅࿇-࿌࿎-࿔၊-၏႞-႟჻፠-፨᎐-᎙᙭-᙮᚛-᚜᛫-᛭᜵-᜶។-៖៘-៛᠀-᠊᥀᥄-᥅᧞-᧿᨞-᨟᭚-᭪᭴-᭼᰻-᰿᱾-᱿᾽᾿-῁῍-῏῝-῟῭-`´-῾\u2000-\u206e⁺-⁾₊-₎₠-₵℀-℁℃-℆℈-℉℔№-℘℞-℣℥℧℩℮℺-℻⅀-⅄⅊-⅍⅏←-⏧␀-␦⑀-⑊⒜-ⓩ─-⚝⚠-⚼⛀-⛃✁-✄✆-✉✌-✧✩-❋❍❏-❒❖❘-❞❡-❵➔➘-➯➱-➾⟀-⟊⟌⟐-⭌⭐-⭔⳥-⳪⳹-⳼⳾-⳿⸀-\u2e7e⺀-⺙⺛-⻳⼀-⿕⿰-⿻\u3000-〿゛-゜゠・㆐-㆑㆖-㆟㇀-㇣㈀-㈞㈪-㉃㉐㉠-㉿㊊-㊰㋀-㋾㌀-㏿䷀-䷿꒐-꓆꘍-꘏꙳꙾꜀-꜖꜠-꜡꞉-꞊꠨-꠫꡴-꡷꣎-꣏꤮-꤯꥟꩜-꩟﬩﴾-﴿﷼-﷽︐-︙︰-﹒﹔-﹦﹨-﹫!-/:-@[-`{-・¢-₩│-○-�]|\ud800[\udd00-\udd02\udd37-\udd3f\udd79-\udd89\udd90-\udd9b\uddd0-\uddfc\udf9f\udfd0]|\ud802[\udd1f\udd3f\ude50-\ude58]|\ud809[\udc00-\udc7e]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83-\udd84\udd8c-\udda9\uddae-\udddd\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83c[\udc00-\udc2b\udc30-\udc93]/g; var string = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"; var newString = string.replace(punctuationRegEx, '').replace(/(\s){2,}/g, '$1'); console.log(newString)