ฉันไม่ได้มีประสบการณ์มากกับ JavaScript แต่ฉันพยายามที่จะสร้างระบบแท็กที่แทนการใช้@
หรือจะใช้#
/
var start = /#/ig; // @ Match
var word = /#(\w+)/ig; //@abc Match
ฉันจะใช้ a /
แทน#
. ฉันได้ลองทำvar slash = '/'
และเพิ่ม+ slash +
แต่ล้มเหลว
ฉันไม่ได้มีประสบการณ์มากกับ JavaScript แต่ฉันพยายามที่จะสร้างระบบแท็กที่แทนการใช้@
หรือจะใช้#
/
var start = /#/ig; // @ Match
var word = /#(\w+)/ig; //@abc Match
ฉันจะใช้ a /
แทน#
. ฉันได้ลองทำvar slash = '/'
และเพิ่ม+ slash +
แต่ล้มเหลว
คำตอบ:
คุณสามารถหลบหนีได้เช่นนี้
/\//ig; // Matches /
หรือเพียงแค่ใช้ indexOf
if(str.indexOf("/") > -1)
คุณต้องหนี/
ด้วย\
.
/\//ig // matches /
หากคุณต้องการใช้/
คุณจำเป็นต้องหลบหนีด้วยไฟล์\
var word = /\/(\w+)/ig;
ในนิพจน์ทั่วไป "/" เป็นอักขระพิเศษที่ต้องใช้ Escape (ตั้งค่าสถานะ AKA โดยการใส่เครื่องหมาย \ ไว้ข้างหน้าดังนั้นจึงเป็นการปฏิเสธฟังก์ชันพิเศษที่อาจให้บริการ)
นี่คือสิ่งที่คุณต้องการ:
var word = /\/(\w+)/ig; // /abc Match
อ่านเกี่ยวกับอักขระพิเศษ RegEx ได้ที่นี่: http://www.regular-expressions.info/characters.html
คุณยังสามารถแก้ไขการจัดการ JS พิเศษของสแลชไปข้างหน้าได้โดยการใส่ไว้ในกลุ่มอักขระดังนี้:
const start = /[/]/g;
"/dev/null".match(start) // => ["/", "/"]
const word = /[/](\w+)/ig;
"/dev/null".match(word) // => ["/dev", "/null"]
/[/]/
/\//
/[/]/
อ่านและทำงานได้ง่ายกว่า แต่น่าเสียดายที่โปรแกรมตรวจสอบ RegEx บางตัวจะรายงานว่า "ตัวคั่นที่ไม่ใช้ค่า Escape จะต้องมีการใช้เครื่องหมายแบ็กสแลช"แม้จะอยู่ในกลุ่มอักขระก็ตาม ฉันเปลี่ยนกลับไปเป็น/\//
แบบน่าเกลียดแล้ว
คุณสามารถหลีกเลี่ยงได้โดยนำหน้าด้วย\
(ทำให้เป็น\/
) หรือใช้new RegExp('/')
เพื่อหลีกเลี่ยงการหลีกเลี่ยงนิพจน์ทั่วไป
ดูตัวอย่างใน JSFiddle
'/'.match(/\//) // matches /
'/'.match(new RegExp('/') // matches /
สำหรับฉันฉันพยายามจับคู่/
ในวันที่ใน 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 (\/)
ยังจะสามารถที่จะใช้ในทำนองเดียวกัน
ฉันพบปัญหาสองประการที่เกี่ยวข้องกับสิ่งที่กล่าวมาเมื่อแยกข้อความที่คั่นด้วย\
และ/
และพบวิธีแก้ปัญหาที่เหมาะกับทั้งสองอย่างนอกเหนือจากการใช้new RegExp
ซึ่งต้องใช้\\\\
ในตอนเริ่มต้น การค้นพบนี้อยู่ใน Chrome และ IE11
นิพจน์ทั่วไป
/\\(.*)\//g
ไม่ทำงาน, ไม่เป็นผล. ฉันคิดว่าสิ่ง//
นี้ถูกตีความว่าเป็นการเริ่มต้นของความคิดเห็นทั้งๆที่มีอักขระหลบหนี นิพจน์ทั่วไป (ใช้ได้เท่าเทียมกันในกรณีของฉันแม้ว่าจะไม่ใช่โดยทั่วไป)
/\b/\\(.*)\/\b/g
ไม่ได้ผลเช่นกัน ฉันคิดว่าข้อที่สอง/
ยุตินิพจน์ทั่วไปทั้งๆที่อักขระหลบหนี
สิ่งที่ไม่ทำงานสำหรับฉันคือการแสดง/
เป็นซึ่งเป็นตัวแทนของเลขฐานสิบหก\x2F
/
ฉันคิดว่ามีประสิทธิภาพและเข้าใจได้มากกว่าการใช้new RegExp
งาน แต่แน่นอนว่าต้องมีความคิดเห็นเพื่อระบุรหัสฐานสิบหก
Forward Slash เป็นอักขระพิเศษดังนั้นคุณต้องเพิ่มแบ็กสแลชก่อนเครื่องหมายทับเพื่อให้ทำงานได้
$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";
โดยที่ / แสดงถึงการค้นหา / ด้วยวิธีนี้คุณ