คำถาม regex แยก Javascript


116

สวัสดีฉันกำลังลองสิ่งที่คิดว่าน่าจะเป็น regex ที่ค่อนข้างง่ายใน Javascript แต่ทำให้ฉันมีปัญหามากมาย ฉันต้องการความสามารถในการแบ่งวันที่ผ่านการแยกจาวาสคริปต์ด้วย '-', '.', '/' และ ''

var date = "02-25-2010";
var myregexp2 = new RegExp("-."); 
dateArray = date.split(myregexp2);

regex ที่ถูกต้องสำหรับสิ่งนี้คืออะไรและความช่วยเหลือทั้งหมดจะดีมาก

คำตอบ:


174

คุณต้องใส่อักขระที่คุณต้องการแยกในคลาสอักขระซึ่งจะบอกเอ็นจินนิพจน์ทั่วไป "อักขระใด ๆ เหล่านี้ตรงกัน" สำหรับวัตถุประสงค์ของคุณสิ่งนี้จะมีลักษณะดังนี้:

date.split(/[.,\/ -]/)

แม้ว่าเครื่องหมายขีดกลางจะมีความหมายพิเศษในคลาสอักขระในฐานะตัวระบุช่วง (เช่น[a-z]หมายถึงเช่นเดียวกับ[abcdefghijklmnopqrstuvwxyz]) แต่ถ้าคุณใส่เป็นสิ่งสุดท้ายในคลาสจะถือว่าขีดกลางตามตัวอักษรและไม่จำเป็นต้องหลีกหนี

เพื่ออธิบายว่าเหตุใดรูปแบบของคุณจึงไม่ทำงานให้/-./บอกเอ็นจินนิพจน์ทั่วไปให้จับคู่อักขระขีดตามตัวอักษรตามด้วยอักขระใด ๆ ( จุดคืออักขระตัวแทนในนิพจน์ทั่วไป) เมื่อใช้ "02-25-2010" จะแบ่งแต่ละครั้งที่พบ "-2" เนื่องจากเส้นประตรงกันและจุดตรงกับ "2"


3
คุณสามารถพูดได้ด้วยว่าจุดไม่มีความหมายพิเศษใด ๆ ภายในคลาสอักขระ - แทนที่จะทำหน้าที่เป็นอักขระตัวแทน (ซึ่งไม่สมเหตุสมผลเลย) มันจะทำหน้าที่เป็นตัวอักษร
Bobby Jack


6

คุณสามารถใช้

date.split(/-/);

หรือ

date.split('-');

1
วางเส้นแบ่งไว้ก่อนโค้ดของคุณและช่องว่าง 4 ช่องจะจัดรูปแบบได้อย่างถูกต้อง
Brandon


3

สมมติว่าสตริงของคุณคือ:

let str = `word1
word2;word3,word4,word5;word7
word8,word9;word10`;

คุณต้องการแยกสตริงตามตัวคั่นต่อไปนี้:

  • ปลายลำไส้ใหญ่
  • อัฒภาค
  • บรรทัดใหม่

คุณสามารถแยกสตริงได้ดังนี้:

let rawElements = str.split(new RegExp('[,;\n]', 'g'));

สุดท้ายคุณอาจต้องตัดแต่งองค์ประกอบในอาร์เรย์:

let elements = rawElements.map(element => element.trim());


-1

ลองใช้สิ่งนี้แทน

date.split (/ \ W + /)


คุณอธิบายได้ไหมว่าทำไมถึงเป็นคำตอบที่ดีกว่า 5+ ที่โพสต์ไว้ก่อน และใช้งานได้จริงอย่างไร?
mjuarez

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