การจับคู่ Forward Slash กับ regex


95

ฉันไม่ได้มีประสบการณ์มากกับ JavaScript แต่ฉันพยายามที่จะสร้างระบบแท็กที่แทนการใช้@หรือจะใช้#/

var start = /#/ig; // @ Match

var word = /#(\w+)/ig; //@abc Match

ฉันจะใช้ a /แทน#. ฉันได้ลองทำvar slash = '/'และเพิ่ม+ slash +แต่ล้มเหลว


1
กรุณาเปลี่ยนชื่อเรื่อง และคุณกำลังพยายามทำอะไรอยู่? ฉันยังไม่รู้หลังจากอ่านคำถามของคุณ
OptimusCrime

ฉันไม่แน่ใจว่าฉันเข้าใจ
John Strickler

คำตอบ:


128

คุณสามารถหลบหนีได้เช่นนี้

/\//ig; //  Matches /

หรือเพียงแค่ใช้ indexOf

if(str.indexOf("/") > -1)

ขอบคุณเบ็นฉันพยายามแล้วเช่นกัน แต่ฉันเพิ่มอีก \ ในตอนท้าย
iBrazilian2



6

ในนิพจน์ทั่วไป "/" เป็นอักขระพิเศษที่ต้องใช้ Escape (ตั้งค่าสถานะ AKA โดยการใส่เครื่องหมาย \ ไว้ข้างหน้าดังนั้นจึงเป็นการปฏิเสธฟังก์ชันพิเศษที่อาจให้บริการ)

นี่คือสิ่งที่คุณต้องการ:

var word = /\/(\w+)/ig; //   /abc Match

อ่านเกี่ยวกับอักขระพิเศษ RegEx ได้ที่นี่: http://www.regular-expressions.info/characters.html


18
"/" ไม่ใช่อักขระพิเศษในนิพจน์ทั่วไป อย่างไรก็ตามเป็นอักขระพิเศษใน JavaScript ที่คั่นตำแหน่งที่ regex เริ่มต้นและสิ้นสุด
sokkyoku

5

คุณยังสามารถแก้ไขการจัดการ JS พิเศษของสแลชไปข้างหน้าได้โดยการใส่ไว้ในกลุ่มอักขระดังนี้:

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

const word = /[/](\w+)/ig;
"/dev/null".match(word)      // => ["/dev", "/null"]

2
+1 ใช้ชุดตัวอักษรที่จะหลีกเลี่ยงการหลบหนีไม่ให้ RegEx ตัวละครตัวหนึ่งอีกต่อไป แต่ก็คุ้มค่าสำหรับการอ่าน: สายตาที่แตกต่างคั่นต่อท้ายอย่างชัดเจนมากกว่า/[/]/ /\//
Dem Pilafian

2
/[/]/อ่านและทำงานได้ง่ายกว่า แต่น่าเสียดายที่โปรแกรมตรวจสอบ RegEx บางตัวจะรายงานว่า "ตัวคั่นที่ไม่ใช้ค่า Escape จะต้องมีการใช้เครื่องหมายแบ็กสแลช"แม้จะอยู่ในกลุ่มอักขระก็ตาม ฉันเปลี่ยนกลับไปเป็น/\//แบบน่าเกลียดแล้ว
Dem Pilafian


1

สำหรับฉันฉันพยายามจับคู่/ในวันที่ใน C # ฉันทำได้โดยใช้(\/):

string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
string text = "Start Date: 4/1/2018";

Match m = Regex.Match(text, pattern);

if (m.Success) 
{ 
    Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
}
else
{
    Console.WriteLine("Not Found!");
}

JavaScript (\/)ยังจะสามารถที่จะใช้ในทำนองเดียวกัน


Downvoter สนใจที่จะอธิบาย? สิ่งนี้ได้ผลและฉันได้พิสูจน์แล้วว่าผ่านการทดสอบ
vapcguy

1
ฉันคิดว่ามันเป็นอุบัติเหตุขอโทษ ฉันพยายามเลิกทำ แต่มันบอกว่าการโหวตของฉันถูกล็อคเว้นแต่จะแก้ไขคำตอบ สิ่งเดียวที่ฉันเห็นคือคุณมีบันทึกการบันทึกกลุ่มที่ดูเหมือนคุณไม่ได้ใช้ มีเหตุผลใดที่ทำให้ทุกอย่างอยู่ในวงเล็บ?
Ryan Quinn

1
@RyanQuinn ขอบคุณสำหรับคำอธิบาย ฉันใช้วงเล็บเพื่อจัดกลุ่มสิ่งต่างๆเข้าด้วยกันเพื่อแสดงตัวเลขเฉพาะที่ฉันคาดหวัง ดูเหมือนว่าจะต้องใช้พวกเขาในไซต์ที่ฉันใช้เพื่อทดสอบ: regexr.com ฉันแก้ไขโพสต์ของฉัน (เพิ่งเพิ่มช่องว่างในตอนท้าย) ดังนั้นคุณควรจะสามารถลบการลงคะแนนได้หากต้องการ
vapcguy

0

ฉันพบปัญหาสองประการที่เกี่ยวข้องกับสิ่งที่กล่าวมาเมื่อแยกข้อความที่คั่นด้วย\และ/และพบวิธีแก้ปัญหาที่เหมาะกับทั้งสองอย่างนอกเหนือจากการใช้new RegExpซึ่งต้องใช้\\\\ในตอนเริ่มต้น การค้นพบนี้อยู่ใน Chrome และ IE11

นิพจน์ทั่วไป

/\\(.*)\//g

ไม่ทำงาน, ไม่เป็นผล. ฉันคิดว่าสิ่ง//นี้ถูกตีความว่าเป็นการเริ่มต้นของความคิดเห็นทั้งๆที่มีอักขระหลบหนี นิพจน์ทั่วไป (ใช้ได้เท่าเทียมกันในกรณีของฉันแม้ว่าจะไม่ใช่โดยทั่วไป)

/\b/\\(.*)\/\b/g

ไม่ได้ผลเช่นกัน ฉันคิดว่าข้อที่สอง/ยุตินิพจน์ทั่วไปทั้งๆที่อักขระหลบหนี

สิ่งที่ไม่ทำงานสำหรับฉันคือการแสดง/เป็นซึ่งเป็นตัวแทนของเลขฐานสิบหก\x2F /ฉันคิดว่ามีประสิทธิภาพและเข้าใจได้มากกว่าการใช้new RegExpงาน แต่แน่นอนว่าต้องมีความคิดเห็นเพื่อระบุรหัสฐานสิบหก


0

Forward Slash เป็นอักขระพิเศษดังนั้นคุณต้องเพิ่มแบ็กสแลชก่อนเครื่องหมายทับเพื่อให้ทำงานได้

$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";

โดยที่ / แสดงถึงการค้นหา / ด้วยวิธีนี้คุณ

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