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
9 để giao hoán các từ trong chuỗi. Trong chuỗi thay thế, ta dùngvar y = x.replace[/[^|\|\s+]\d+\s+~\s+/g, "$1"];
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/;
var re = /ab+c/;
Kết quả hiển thị là: "Smith, John".
Tạo một đối tượng
1 :var y = x.replace[/\d{6}\s+~\s/g, ""];
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
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.
var y = x.replace[/\d{6}\s+~\s/g, ""];
var y = x.replace[/\d{6}\s+~\s/g, ""];
var y = x.replace[/\d{6}\s+~\s/g, ""];
var y = x.replace[/\d{6}\s+~\s/g, ""];
var y = x.replace[/[^|\|\s+]\d+\s+~\s+/g, "$1"];
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.
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'.
Để 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[" | "];
0Biể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[" | "];
1Như 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[" | "];
2Nế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[" | "];
3Kết quả hiển thị là: "Smith, John".
Bài viết được dịch và tham khảo từ đây