Hướng dẫn javascript regex remove string - javascript regex loại bỏ chuỗi

Chia chuỗi thành một mảng đa chiều bằng cách sử dụng các dấu phân cách

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
4 và
var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
5. Sau đó, bạn có thể tắt ID, vì đây là mục đầu tiên trong mảng và kết hợp tất cả lại với nhau:

var y = x.split(" | ").map(function(s) {
    s = s.split(" ~ ");
    s.shift();
    return s.join(" ~ ");
}).join(" | ");

Hoặc, lấy phần phụ sau

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
5:

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");

Hoặc, sửa chữa RegEXP của bạn để tính toán biến thể độ dài khoảng trắng:

var y = x.replace(/\d{6}\s+~\s/g, "");

Nhưng, RegEXP này sẽ chỉ hoạt động miễn là luôn có chính xác 6 chữ số trong ID và không bao giờ 6 chữ số trước

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
8 ở nơi khác. Ví dụ: nếu cần có một giá trị cho
var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
9 trên 100000 trở lên, RegEXP của bạn cũng sẽ loại bỏ điều đó.

Một biểu thức chính quy tốt hơn sẽ có bất kỳ số lượng chữ số nào (nhiều hơn hoặc ít hơn 6) và sẽ chỉ khớp với nó nếu đó là mục đầu tiên hoặc theo dõi

var y = x.replace(/\d{6}\s+~\s/g, "");
0:

var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");

Sự xuất hiện của /d(b+)d/g trong 2 lệnh trên là những đối tượng biểu thức chính quy khác nhau và vì thế có những giá trị khác nhau cho thuộc tính lastIndex. Nếu bạn cần truy cập những thuộc tính của một biểu thức chính quy, bạn nên gán nó tới một biến.

Sử dụng nhiều dấu ngoặc tròn

Sử dụng nhiều ngoặc tròn trong một biểu thức chính quy cho ta nhiều kết quả so khớp tương ứng được nhớ. Cho ví dụ, /a(b)c/ khớp với 'abc' và nhớ 'b'. Để gọi lại những kết quả so khớp, sử dụng những phần tử của mảng [1]..., [n].

Số lượng các chuỗi con trong những ngoặc tròn là không giới hạn. Mảng trả về giữ lại tất cả mọi thứ được tìm thấy.

  • Đoạn mã JavaScript dưới đây sử dụng phương thức

    var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
    
    9 để giao hoán các từ trong chuỗi. Trong chuỗi thay thế, ta dùng
    var re = /ab+c/;
    
    0 và
    var re = /ab+c/;
    
    1 để chỉ các chuỗi khớp với mẫu trong ngoặc ở vị trí thứ 1 và 2.

    var re = /ab+c/;
    

    Kết quả hiển thị là: "Smith, John".

  • Tạo một đối tượng

    var y = x.replace(/\d{6}\s+~\s/g, "");
    
    1 :

    var re = new RegExp("ab+c");
    

    Với cách này, các biểu thức chính quy sẽ được dịch ra lúc thực thi chương trình nên hiệu năng không đạt được như với việc sử dụng cách mô tả chính quy thuần. Nhưng ưu điểm là nó có thể thay đổi được, nên ta thường sử dụng chúng khi ta muốn nó có thể thay đổi được, hoặc khi ta chưa chắc chắn về các mẫu chính quy (pattern) chẳng hạn như khi nhập từ bàn phím.

III. Cách viết một mẫu biểu thức chính quy

Một mẫu biểu thức chính quy là một tập các kí tự thường, như /abc/, hay một tập kết hợp cả kí tự thường và kí tự đặc biệt như /ab*c/ hoặc /Chapter (\d+).\d*/ . Trong ví dụ cuối có chứa cả các dấu ngoặc đơn( () )được sử dụng như các thiết bị nhớ, tức là các mẫu trong phần

var y = x.replace(/\d{6}\s+~\s/g, "");
2 này sau khi được tìm kiếm có thể được nhớ lại để sử dụng cho các lần sau./abc/, hay một tập kết hợp cả kí tự thường và kí tự đặc biệt như /ab*c/ hoặc /Chapter (\d+).\d*/ . Trong ví dụ cuối có chứa cả các dấu ngoặc đơn( () )được sử dụng như các thiết bị nhớ, tức là các mẫu trong phần
var y = x.replace(/\d{6}\s+~\s/g, "");
2 này sau khi được tìm kiếm có thể được nhớ lại để sử dụng cho các lần sau.

1. Sử dụng mẫu đơn giản

Các mẫu đơn giản là các mẫu có thể được xây dựng từ các kí tự có thể thể tìm kiếm một cách trực tiếp.

Ví dụ:

mẫu

var y = x.replace(/\d{6}\s+~\s/g, "");
3 sẽ tìm các các đoạn
var y = x.replace(/\d{6}\s+~\s/g, "");
4 theo đúng thứ tự đó trong các chuỗi. Mẫu này sẽ khớp được với "Hi, My name is abc." và "I am from abcdef city.", vì cả 2 chuỗi này đều chứa đoạn 'abc'. Còn với chuỗi
var y = x.replace(/\d{6}\s+~\s/g, "");
5, nó sẽ không khớp vì chuỗi này không chứa abc theo đúng thứ tự, mà chỉ chứa ab c.

2. Sử dụng các kí tự đặc biệt

Các mẫu có thể chứa các kí tự đặc biệt cho các mục đích tìm kiếm nâng cao mà tìm kiếm trực tiếp sẽ khó khăn. Thí dụ như tìm một đoạn chứa một hoặc nhiều hơn một kí tự b, hay tìm một hoặc nhiều kí tự dấu cách (while space).

Ví dụ:

mẫu

var y = x.replace(/\d{6}\s+~\s/g, "");
3 sẽ tìm các các đoạn
var y = x.replace(/\d{6}\s+~\s/g, "");
4 theo đúng thứ tự đó trong các chuỗi. Mẫu này sẽ khớp được với "Hi, My name is abc." và "I am from abcdef city.", vì cả 2 chuỗi này đều chứa đoạn 'abc'. Còn với chuỗi
var y = x.replace(/\d{6}\s+~\s/g, "");
5, nó sẽ không khớp vì chuỗi này không chứa abc theo đúng thứ tự, mà chỉ chứa ab c./ab*c/ có thể tìm các đoạn có chứa: một kí tự '
var y = x.replace(/\d{6}\s+~\s/g, "");
6, theo sau là không có hoặc có một hoặc có nhiều kí tự
var y = x.replace(/\d{6}\s+~\s/g, "");
7, cuối cùng là một kí tự
var y = x.replace(/\d{6}\s+~\s/g, "");
8 như chuỗi
var y = x.replace(/\d{6}\s+~\s/g, "");
9 sẽ được khớp với xâu con
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
0.

2. Sử dụng các kí tự đặc biệt

Hướng dẫn javascript regex remove string - javascript regex loại bỏ chuỗi

Các mẫu có thể chứa các kí tự đặc biệt cho các mục đích tìm kiếm nâng cao mà tìm kiếm trực tiếp sẽ khó khăn. Thí dụ như tìm một đoạn chứa một hoặc nhiều hơn một kí tự b, hay tìm một hoặc nhiều kí tự dấu cách (while space).

mẫu /ab*c/ có thể tìm các đoạn có chứa: một kí tự '

var y = x.replace(/\d{6}\s+~\s/g, "");
6, theo sau là không có hoặc có một hoặc có nhiều kí tự
var y = x.replace(/\d{6}\s+~\s/g, "");
7, cuối cùng là một kí tự
var y = x.replace(/\d{6}\s+~\s/g, "");
8 như chuỗi
var y = x.replace(/\d{6}\s+~\s/g, "");
9 sẽ được khớp với xâu con
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
0.

Ví dụ:

mẫu

var y = x.replace(/\d{6}\s+~\s/g, "");
3 sẽ tìm các các đoạn
var y = x.replace(/\d{6}\s+~\s/g, "");
4 theo đúng thứ tự đó trong các chuỗi. Mẫu này sẽ khớp được với "Hi, My name is abc." và "I am from abcdef city.", vì cả 2 chuỗi này đều chứa đoạn 'abc'. Còn với chuỗi
var y = x.replace(/\d{6}\s+~\s/g, "");
5, nó sẽ không khớp vì chuỗi này không chứa abc theo đúng thứ tự, mà chỉ chứa ab c.

2. Sử dụng các kí tự đặc biệt

Các mẫu có thể chứa các kí tự đặc biệt cho các mục đích tìm kiếm nâng cao mà tìm kiếm trực tiếp sẽ khó khăn. Thí dụ như tìm một đoạn chứa một hoặc nhiều hơn một kí tự b, hay tìm một hoặc nhiều kí tự dấu cách (while space).

mẫu /ab*c/ có thể tìm các đoạn có chứa: một kí tự 'var y = x.replace(/\d{6}\s+~\s/g, ""); 6, theo sau là không có hoặc có một hoặc có nhiều kí tự var y = x.replace(/\d{6}\s+~\s/g, ""); 7, cuối cùng là một kí tự var y = x.replace(/\d{6}\s+~\s/g, ""); 8 như chuỗi var y = x.replace(/\d{6}\s+~\s/g, ""); 9 sẽ được khớp với xâu con var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1"); 0.

Bảng dưới đây mô tả đầy đủ các kí tự đặc biệt có thể dùng với biểu thức chính quy.

Hướng dẫn javascript regex remove string - javascript regex loại bỏ chuỗi

3. Sử dụng ngoặc tròn

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");

Ngoặc tròn bao quanh bất kỳ phần nào của biểu thức chính quy sẽ khiến phần kết quả so khớp được nhớ. Mỗi lần nhớ, chuỗi con có thể được gọi lại để sử dụng, mô tả trong

var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
1.

var myArray = /d(b+)d/g.exec("cdbbdbsbz");

mẫu /Chapter (\d+).\d*/ khớp đúng với 'Chapter ' theo sau bởi một hoặc nhiều kí tự số, sau nữa là một dấu chấm thập phân, cuối cùng có thể là 0 hoặc nhiều kí tự số. Bên cạnh đó, dấu ngoặc tròn được sử dụng để nhớ một hoặc nhiều kí tự số đầu tiên được khớp.

var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");

Mẫu này được tìm thấy trong chuỗi "Open Chapter 4.3, paragraph 6", nhớ '4' nhưng không được tìm thấy trong chuỗi "Chapter 3 and 4", bởi vì chuỗi đó không có dấu chấm sau kí tự số '3'.

Hướng dẫn javascript regex remove string - javascript regex loại bỏ chuỗi

Để so khớp một chuỗi con không nhớ, đặt ?: ở vị trí đầu tiên trong ngoặc. Ví dụ, (?:\d+) khớp với một hoặc nhiều kí tự số nhưng không nhớ kết quả so khớp.

var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + myRe.lastIndex);

IV. Làm việc với biểu thức chính quy

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
0

Biểu thức chính quy được sử dụng với phương thức

var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
2 và
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
3 của lớp
var y = x.replace(/\d{6}\s+~\s/g, "");
1 hoặc phương thức
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
5 và
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
6 của
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
7. Những phương thức này được giải thích chi tiết trong
var y = x.replace(/(^|\|\s+)\d+\s+~\s+/g, "$1");
8.

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
1

Như ví dụ dưới đây, phương thức exec được dùng để tìm chuỗi phù hợp theo mẫu so khớp.

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
2

Nếu bạn không cần truy cập những thuộc tính khác của biểu thức chính quy, sử dụng cách sau:

Nếu bạn muốn khởi tạo một biểu thức chính quy từ một chuỗi:

Với những mã này, so khớp thành công và trả về một mảng kết quả với những thuộc tính được liệt kê trong bảng dưới đây.

Như dạng thứ 2 của ví dụ trên, bạn có thể dùng một biểu thức chính quy được khởi tạo mà không gán nó tới một biến. Tuy nhiên, nếu bạn làm thế, mỗi lần xuất hiện là một biểu thức chính quy mới. Vì lí do này, nếu bạn không gán nó vào một biến, bạn sẽ không thể truy cập các thuộc tính của biểu thức chính quy đó nữa. Ví dụ bạn có đoạn script sau:

Ví dụ:

mẫu

var y = x.replace(/\d{6}\s+~\s/g, "");
3 sẽ tìm các các đoạn
var y = x.replace(/\d{6}\s+~\s/g, "");
4 theo đúng thứ tự đó trong các chuỗi. Mẫu này sẽ khớp được với "Hi, My name is abc." và "I am from abcdef city.", vì cả 2 chuỗi này đều chứa đoạn 'abc'. Còn với chuỗi
var y = x.replace(/\d{6}\s+~\s/g, "");
5, nó sẽ không khớp vì chuỗi này không chứa abc theo đúng thứ tự, mà chỉ chứa ab c.

var y = x.split(" | ").map(function(s) {
    return s.substr(s.indexOf(" ~ ") + 3);
}).join(" | ");
3

Kết quả hiển thị là: "Smith, John".

Bài viết được dịch và tham khảo từ đây