如果我有一个字符串,其中有任何类型的非字母数字字符:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
我如何在JavaScript中得到一个没有标点符号的版本:
"This is an example of a string with punctuation"
如果我有一个字符串,其中有任何类型的非字母数字字符:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
我如何在JavaScript中得到一个没有标点符号的版本:
"This is an example of a string with punctuation"
当前回答
如果您想从字符串中删除特定的标点符号,最好明确地删除您想要的标点符号,例如
replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"")
执行上述操作仍然不会返回您指定的字符串。如果您想要删除由于删除疯狂的标点符号而留下的任何额外的空格,那么您将需要执行以下操作
replace(/\s{2,}/g," ");
完整的例子:
var s = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var punctuationless = s.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
var finalString = punctuationless.replace(/\s{2,}/g," ");
在firebug控制台中运行代码的结果:
其他回答
如果你想从任何字符串中删除标点符号,你应该使用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)
截至2021年,许多现代浏览器都支持JavaScript内置的:RegExp: Unicode属性转义。所以你现在可以简单地使用\p{p}:
str.replace(/[\p{P}$+<=>^`|~]/gu, '')
如果您想忽略所有符号(\p{S})和标点符号,则可以进一步简化正则表达式。
str.replace(str.replace(/[\p{P}\p{S}]/gu, '')
如果你想剥离除字母(\p{L}),数字(\p{N})和分隔符(\p{Z})之外的所有内容。你可以使用像这样的否定字符集(也适用于非英语字母数字字符):
str.replace(/[^\p{L}\p{N}\p{Z}]/gu, '')
上面的正则表达式可以工作,但更常见的用例是使用正则表达式的空白类而不是Unicode分隔符字符集,因为后者不包括制表符和换行符。试试这个:
str.replace(/[^\p{L}\p{N}\s]/gu, '')
const str = 'This。, -/ is #!$ % ^ & *示例;:{}= -_字符串,带有' ~)()标点符号'; console.log (str。替换(/ [\ p {p }$+<=>^`|~]/ 顾,”); console.log (str。替换(/ [\ p {p} \ p{年代}]/顾”); console.log (str。替换(/ [^ \ p {L} \ p {N} \ p {Z}] /顾”); console.log (str。替换(/ [^ \ p {L} \ p {N} \ s] /顾”);
你也可能喜欢用.replace(/ +/g, ' ')来串起连续的空格。
你可以随意摆弄这些东西!裁判: Unicode字符属性-维基百科 Unicode属性转义- MDN
它很简单,只是替换字符而不是单词:
.replace(/[^\w]/g, ' ')
如果你想只保留字母和空格,你可以这样做:
str.replace(/[^a-zA-Z ]+/g, '').replace('/ {2,}/',' ')
我遇到过同样的问题,这个解决方案很管用,而且可读性很强:
var sentence = "This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation";
var newSen = sentence.match(/[^_\W]+/g).join(' ');
console.log(newSen);
结果:
"This is an example of a string with punctuation"
诀窍是创建一个负集合。这意味着它匹配任何不在集合内的东西,即[^abc] -不是a, b或c
\W是任何非单词,所以[^\W]+将否定任何非单词char。
通过添加_(下划线),你也可以否定它。
让它全局应用/g,然后你可以通过它运行任何字符串,并清除标点符号:
/[^_\W]+/g
又漂亮又干净;)