นิพจน์ทั่วไป: อักขระใด ๆ ที่ไม่ใช่ตัวอักษรหรือตัวเลข


115

ฉันกำลังพยายามหานิพจน์ทั่วไปที่จะจับคู่อักขระใด ๆ ที่ไม่ใช่ตัวอักษรหรือตัวเลข ดังนั้นอักขระเช่น (,, @, £, () ฯลฯ ...

เมื่อพบแล้วฉันต้องการแทนที่ด้วยช่องว่าง

คำแนะนำใด ๆ.

คำตอบ:


167

หากต้องการจับคู่สิ่งอื่นที่ไม่ใช่ตัวอักษรหรือตัวเลขคุณสามารถลองสิ่งนี้:

[^a-zA-Z0-9]

และเพื่อแทนที่:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');

18
\wใช้สำหรับอักขระ Word และเหมือนกับ[a-zA-Z0-9_](สังเกตว่าขีดล่างถือเป็นอักขระคำ) ... ดังนั้นชวเลขจะเป็นstr.replace(/[^\w]/g, ' ')
Joel Mellon

แต่จะรวมถึงตัวอักษร Unicode จำนวนมากด้วย! มีวิธีใดบ้างในการยกเว้นตัวอักษร Unicode?
Clite Tailor

1
หากต้องการรวมอักขระ Unicode คุณสามารถใช้ [^ \ p {L} 0-9]
Dave

@Dave: ในปี 2018 คุณขาดโพลีฟิลล์ไม่ได้เห็นได้ชัดว่า ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay

มีวิธีใดบ้างแทนที่จะแทนที่ด้วยช่องว่าง ... แทนที่ด้วย "\" ตามด้วยอักขระที่ถูกระบุ? เช่นนี้: ทำให้ dfj นี้, dsf7lfsd .sdklfj เป็น dfj \, dsf7lfsd \ .sdklfj?
CrazySpy

40

นิพจน์ทั่วไปนี้จับคู่สิ่งที่ไม่ใช่ตัวอักษรตัวเลขหรือขีดล่าง ( _) อักขระ

\W

ตัวอย่างเช่นใน JavaScript:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"

ฉันเชื่อว่าเขากำลังมองหา / (_ | \ W) / g เพื่อจับคู่สิ่งที่ไม่ใช่ตัวเลขหรือตัวอักษร (ภาษาอังกฤษ)
kennebec

@sbmaxx ฉันต้องการแทนที่ทั้งหมดยกเว้น &, (,) อักขระเหล่านี้ ฉันจะเพิ่มเงื่อนไขนี้ใน regex ปัจจุบันได้อย่างไร
K Pal

17

คุณกำลังมองหา:

var yourVar = '1324567890abc§$)%';
yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' ');

สิ่งนี้จะแทนที่อักขระที่ไม่ใช่ตัวเลขและตัวอักษรทั้งหมดด้วยช่องว่าง

ตัว "g" ที่ด้านท้ายจะแทนที่เหตุการณ์ทั้งหมด

แทนการระบุ az (ตัวพิมพ์เล็ก) และแอริโซนา (ตัวพิมพ์ใหญ่) /[^a-z0-9]/giนอกจากนี้คุณยังสามารถใช้ตัวเลือกในกรณีที่มีความอ่อนไหว:


จะตรงกับช่องว่างหรือไม่ ฉันต้องการช่องว่างที่จะเก็บไว้ ขอบคุณ.
James Jeffery

อักขระช่องว่างจะตรงกัน แต่จะถูกแทนที่ด้วยอักขระช่องว่างดังนั้นจึงมีผลบังคับใช้อักขระเว้นวรรค (ช่องว่างจะคงช่องว่าง)
jimbo

9

นี่เป็นวิธีที่สายเกินไป แต่เนื่องจากไม่มีคำตอบที่ยอมรับได้ฉันจึงต้องการให้สิ่งที่ฉันคิดว่าง่ายที่สุด: \ D - จับคู่อักขระที่ไม่ใช่ตัวเลขทั้งหมด

var x = "123 235-25%";
x.replace(/\D/g, '');

ผลลัพธ์ใน x: "12323525"

ดูhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions


5

ลองทำ str.replace (/ [^ \ w] /); มันจะแทนที่ทั้งหมดที่ไม่ใช่ตัวอักษรและตัวเลขจากสตริงของคุณ!

แก้ไข 1: str.replace(/[^\w]/g, ' ')


2
คำตอบที่ใช้งานได้str.replace(/[^\w]/g, ' ')คือ หากคุณไม่รวมการ/gตั้งค่าสถานะจะแทนที่เหตุการณ์แรกเท่านั้น และถ้าคุณไม่กำหนดสตริงแทนที่นี่คือช่องว่าง' 'มันจะแทนที่ด้วยตำแหน่งundefinedทั้งหมด \wสุดท้ายขีดจะไม่ถูกแทนที่เพราะพวกเขาตรงกับ คำตอบนี้ไม่ใช่ความพอดี
Julien Lirochon

4
  • จับคู่ตัวอักษรเท่านั้น /[A-Z]/ig
  • จับคู่สิ่งที่ไม่ใช่ตัวอักษร /[^A-Z]/ig
  • จับคู่หมายเลขเท่านั้น/[0-9]/gหรือ/\d+/g
  • จับคู่สิ่งที่ไม่ใช่ตัวเลข/[^0-9]/gหรือ/\D+/g
  • จับคู่สิ่งที่ไม่ใช่ตัวเลขหรือตัวอักษร /[^A-Z0-9]/ig

มีรูปแบบอื่น ๆ ที่เป็นไปได้


3

เพียงเพื่อให้คนอื่นเห็น:

someString.replaceAll("([^\\p{L}\\p{N}])", " ");

จะลบอักขระ Unicode ที่ไม่ใช่ตัวอักษรและไม่ใช่ตัวเลข

ที่มา


ฉันไม่แน่ใจว่าทั้งสองโหวตมาจากไหน แต่ใน JavaScript (ซึ่งเป็นคำถามเกี่ยวกับ) ไม่มีreplaceAllและการ\p{..}หลีกเลี่ยงคุณสมบัติไม่ได้ถูกนำมาใช้อย่างกว้างขวาง
Nickolay

2

คุณได้ลองหรือstr = str.replace(/\W|_/g,'');ไม่มันจะส่งคืนสตริงที่ไม่มีอักขระใด ๆ และคุณสามารถระบุได้ว่าอักขระพิเศษใด ๆ หลังแถบไปป์|เพื่อจับพวกมันด้วย

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); มันจะกลับมา str = 1324567890abcJohnDoe

หรือมองหาตัวเลขและตัวอักษรและแทนที่ด้วยสตริงว่าง (""):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); มันจะกลับมา str = '§$)% #$@';


1

หากต้องการจับคู่สิ่งอื่นที่ไม่ใช่ตัวอักษรหรือตัวเลขหรือตัวอักษรที่มีตัวกำกับเสียงเช่นéคุณสามารถลองสิ่งนี้:

[^\wÀ-úÀ-ÿ]

และเพื่อแทนที่:

var str = 'dfj,dsf7é@lfsd .sdklfàj1';
str = str.replace(/[^\wÀ-úÀ-ÿ]/g, '_');

แรงบันดาลใจจากโพสต์ด้านบนพร้อมการสนับสนุนการกำกับเสียง

แหล่งที่มา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.