답변:
문자열에서 특정 구두점을 제거하려면 원하는 것을 정확하게 명시 적으로 제거하는 것이 가장 좋습니다.
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 Console에서 코드를 실행 한 결과 :
@+?><[]+
)에 문자를 몇 개 더 추가했습니다 replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. 누군가가 아직 약간 더 완벽한 세트를 찾고 있다면.
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
또 다른 대안이 될 수 있도록, 더 나은 나를 위해 작동 어느 :replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
str = str.replace(/[^\w\s]|_/g, "")
.replace(/\s+/g, " ");
영숫자와 공백을 제외한 모든 문자를 제거한 다음 인접한 여러 문자를 단일 공백으로 축소합니다.
상해:
\w
숫자, 문자 또는 밑줄입니다.\s
공백입니다.[^\w\s]
숫자, 문자, 공백 또는 밑줄이 아닌 것입니다.[^\w\s]|_
밑줄을 다시 추가한다는 점을 제외하고 # 3과 같습니다.wouldn't
don't
US-ASCII의 표준 문장 부호 문자는 다음과 같습니다. !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
유니 코드 구두점 (예 : 중괄호, 엠-대시 등)의 경우 특정 블록 범위에서 쉽게 일치시킬 수 있습니다. 일반 문장 블록입니다 \u2000-\u206F
, 그리고 보충 문장 블록입니다\u2E00-\u2E7F
.
합치면 제대로 탈출하면 다음과 같은 RegExp가 나타납니다.
/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,\-.\/:;<=>?@\[\]^_`{|}~]/
이는 구두점과 거의 일치해야합니다. 따라서 원래 질문에 대답하려면 다음을 수행하십시오.
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 소스 : http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
/ [^ A-Za-z0-9 \ s] / g는 모든 구두점과 일치하지만 공백은 유지해야합니다. 따라서 .replace(/\s{2,}/g, " ")
필요한 경우 추가 공간을 교체 하는 데 사용할 수 있습니다 . http://rubular.com/ 에서 정규식을 테스트 할 수 있습니다.
.replace(/[^A-Za-z0-9\s]/g,"").replace(/\s{2,}/g, " ")
업데이트 : 입력이 ANSI 영어 인 경우에만 작동합니다.
나는 같은 문제를 겪었고,이 솔루션은 트릭을 수행했으며 매우 읽을 수있었습니다.
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]+
워드 아닌 그 어떤 것도 부정 할 문자 합니다.
_ (밑줄)을 추가하면이를 무시할 수 있습니다.
전역 적으로 적용 /g
하면 문자열을 통해 구두점을 지울 수 있습니다.
/[^_\W]+/g
좋고 깨끗하다;)
다른 사람들을 위해 여기에 넣겠습니다.
모든 언어에 대해 모든 구두점 문자를 찾습니다.
유니 코드 구두점 카테고리로 구성 $
되며 괄호 및\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
기본 교체 :
".test'da, te\"xt".replace(/[\-=_!"#%&'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g,"")
"testda text"
공간으로 \ s를 추가했습니다.
".da'fla, te\"te".split(/[\s\-=_!"#%&'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g)
문장 부호가 아닌 자아와 일치하도록 패턴을 반전시키기 위해 ^를 추가했습니다.
".test';the, te\"xt".match(/[^\s\-=_!"#%&'*{},.\/:;?\(\)\[\]@\\$\^*+<>~`\u00a1\u00a7\u00b6\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0af0\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f14\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1360-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cc0-\u1cc7\u1cd3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u2e18\u2e19\u2e1b\u2e1e\u2e1f\u2e2a-\u2e2e\u2e30-\u2e39\u3001-\u3003\u303d\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uaaf0\uaaf1\uabeb\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]+/g)
히브리어와 같은 언어의 경우 작은 따옴표와 큰 따옴표를 제거하고 더 많은 생각을 할 수 있습니다.
이 스크립트를 사용하여 :
1 단계 : Firefox에서 제어를 U + 1234 숫자의 열을 선택하고 복사하십시오 .U + 12456은 영어를 대체하지 마십시오.
2 단계 (크롬에서 수행)는 텍스트 영역을 찾아서 붙여 넣은 다음 마우스 오른쪽 버튼을 클릭하고 검사를 클릭하십시오. 그러면 $ 0으로 선택한 요소에 액세스 할 수 있습니다.
var x=$0.value
var z=x.replace(/U\+/g,"").split(/[\r\n]+/).map(function(a){return parseInt(a,16)})
var ret=[];z.forEach(function(a,k){if(z[k-1]===a-1 && z[k+1]===a+1) { if(ret[ret.length-1]!="-")ret.push("-");} else { var c=a.toString(16); var prefix=c.length<3?"\\u0000":c.length<5?"\\u0000":"\\u000000"; var uu=prefix.substring(0,prefix.length-c.length)+c; ret.push(c.length<3?String.fromCharCode(a):uu)}});ret.join("")
3 단계 첫 번째 문자 위에 여러 문자를 추가하거나 제거 할 수 있기 때문에 ASCII가 범위가 아닌 별도의 문자로 아스키를 복사했습니다.
유니 코드를 인식하는 언어에서 유니 코드 문장 부호 문자 속성은 \p{P}
일반적으로 약어 \pP
로 확장 할 수 있습니다.\p{Punctuation}
되며 가독성 위해 .
Perl 호환 정규식 라이브러리를 사용하고 있습니까?
문자열에서 문장 부호를 제거하려면 P
유니 코드 클래스를 사용해야합니다 .
그러나 JavaScript RegEx에서는 클래스가 허용되지 않으므로 모든 구두점과 일치해야하는이 RegEx를 사용해 볼 수 있습니다. 다음 범주와 일치합니다. Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So 일반 구두점 보충 구두점 CJKSymbolsAndPunctuation CuneiformNumbersAndPunctuation.
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)
en-US (미국 영어) 문자열의 경우 다음과 같이 충분합니다.
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation".replace( /[^a-zA-Z ]/g, '').replace( /\s\s+/g, ' ' )
UTF-8과 중국어 / 러시아어 및 모든 문자를 지원하는 경우 UTF-8 문자도이를 대체하므로 원하는 것을 지정해야합니다.
에 따라 문장 부호의 위키 백과의 목록 나는 구두점을 감지 다음 정규식을 구축했다 :
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
/
(가장 일반적)을 사용하는 경우 다음과 같이 백 슬래시를 추가하여 위의 문자 클래스 내에서 이스케이프해야합니다 \/
. 이것이 당신이 그것을 사용하는 방법입니다 : "String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. 그건 그렇고, 나는 어디에서 백틱 (`)을 보지 못합니까?
\s
)를 단일 공백으로 바꿉니다 . 여러 개의 공백 문자를 하나로 축소하려면 다음과 같이 상한을 그대로 두십시오replace(/\s{2,}/g, ' ')
.