Đối sánh một dấu gạch chéo về phía trước với một regex


90

Tôi không có nhiều kinh nghiệm với JavaScript nhưng tôi đang cố gắng tạo một hệ thống thẻ, thay vì sử dụng @hoặc #, sẽ sử dụng /.

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

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

Làm thế nào tôi có thể sử dụng một /thay vì #. Tôi đã thử làm var slash = '/'và thêm + slash +, nhưng không thành công.


1
Vui lòng thay đổi tiêu đề. Và bạn thực sự đang cố gắng làm gì? Tôi vẫn không biết sau khi đọc câu hỏi của bạn.
OptimusCrime

Tôi không chắc là tôi hiểu.
John Strickler

Câu trả lời:


123

Bạn có thể thoát khỏi nó như thế này.

/\//ig; //  Matches /

hoặc chỉ sử dụng indexOf

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

Cảm ơn bạn Ben, tôi cũng đã thử nhưng tôi đã thêm một \ khác vào cuối.
iBrazilian2

21

Bạn cần phải thoát khỏi /với a \.

/\//ig // matches /

6

Nếu bạn muốn sử dụng, /bạn cần phải thoát khỏi nó bằng\

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

6

Trong biểu thức chính quy, "/" là một ký tự đặc biệt cần phải được thoát ra (AKA được gắn cờ bằng cách đặt dấu \ trước nó, do đó phủ nhận bất kỳ chức năng chuyên biệt nào mà nó có thể phục vụ).

Đây là những gì bạn cần:

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

Đọc thêm các ký tự đặc biệt của RegEx tại đây: http://www.regular-expressions.info/characters.html


17
"/" không phải là một ký tự đặc biệt trong biểu thức chính quy. Tuy nhiên, nó là một ký tự đặc biệt trong JavaScript phân định vị trí bắt đầu và kết thúc của regex.
sokkyoku

5

Bạn cũng có thể làm việc xung quanh việc xử lý JS đặc biệt của dấu gạch chéo lên bằng cách đặt nó trong một nhóm ký tự, như sau:

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

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

2
+1, Sử dụng một bộ ký tự để tránh thoát làm cho RegEx dài hơn một ký tự, nhưng nó đáng giá để dễ đọc: /[/]/phân biệt trực quan dấu phân cách cuối rõ ràng hơn /\//.
Dem Pilafian

2
/[/]/dễ đọc và hoạt động dễ dàng hơn, nhưng thật không may, một số trình xác thực RegEx sẽ báo cáo "Dấu phân tách không thoát phải được thoát bằng dấu gạch chéo ngược" ngay cả trong một nhóm ký tự . Vì vậy, tôi đã chuyển trở lại /\//hình dạng xấu xí .
Dem Pilafian


1

Đối với tôi, tôi đã cố gắng khớp vào /một ngày trong C #. Tôi đã làm điều đó chỉ bằng cách sử dụng (\/):

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 cũng có thể sử dụng tương tự (\/).


Downvoter, quan tâm để giải thích? Điều này hoạt động và tôi đã chứng minh điều đó thông qua thử nghiệm nó.
vapcguy

1
Tôi nghĩ đó là một tai nạn, xin lỗi. Tôi đã cố gắng hoàn tác, nhưng nó cho biết phiếu bầu của tôi bị khóa trừ khi câu trả lời được chỉnh sửa. Điều duy nhất tôi thấy là bạn có một nhật ký ghi lại các nhóm mà bạn dường như không sử dụng. Bất kỳ lý do nào tại sao mọi thứ đều nằm trong ngoặc đơn?
Ryan Quinn,

1
@RyanQuinn Cảm ơn bạn đã giải thích. Tôi đã sử dụng dấu ngoặc đơn để nhóm các thứ lại với nhau để đại diện cho một chữ số cụ thể mà tôi mong đợi. Dường như nó cũng yêu cầu chúng trên một trang web mà tôi đang sử dụng để kiểm tra: regexr.com Tôi đã chỉnh sửa bài đăng của mình (chỉ thêm một khoảng trắng ở cuối), vì vậy bạn có thể xóa phiếu phản đối nếu muốn.
vapcguy 29/10/18

0

Tôi gặp phải hai vấn đề liên quan đến những điều đã nói ở trên, khi trích xuất văn bản được phân tách bằng \/, và tìm thấy một giải pháp phù hợp với cả hai, ngoài việc sử dụng new RegExp, yêu cầu \\\\ngay từ đầu. Những phát hiện này có trong Chrome và IE11.

Biểu thức chính quy

/\\(.*)\//g

không hoạt động. Tôi nghĩ rằng //nó được hiểu là sự bắt đầu của một bình luận mặc dù có nhân vật trốn thoát. Biểu thức chính quy (có giá trị như nhau trong trường hợp của tôi mặc dù không phải nói chung)

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

cũng không hoạt động. Tôi nghĩ rằng thứ hai /chấm dứt biểu thức chính quy mặc dù có ký tự thoát.

Những gì hiện công việc đối với tôi là đại diện /như \x2F, đó là đại diện của hệ thập lục phân /. Tôi nghĩ điều đó hiệu quả và dễ hiểu hơn là sử dụng new RegExp, nhưng tất nhiên nó cần một nhận xét để xác định mã hex.


0

Dấu gạch chéo chuyển tiếp là ký tự đặc biệt, vì vậy bạn phải thêm dấu gạch chéo ngược trước dấu gạch chéo ngược để làm cho nó hoạt động

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

ở đâu / đại diện cho tìm kiếm / Theo cách này, bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.