Vui lòng đề xuất một giải pháp thay thế cho eval () rõ ràng là "không an toàn". Sẽ đánh giá cao một lời giải thích về lý do tại sao là tốt. Tôi đã sử dụng mã này cho ứng dụng máy tính của mình và nó hoạt động nhưng tôi muốn tối ưu hóa nó.
if (e.target.innerHTML === "=" ){
newArr=arr.join(' ');
var result =eval(newArr);
pnode.innerHTML = result;
}
else
{
pnode.innerHTML = e.target.innerHTML;
arr.push(e.target.innerHTML);
console.log(arr);
}
hỏi ngày 12 tháng 7 năm 2020 lúc 5:21Jul 12, 2020 at 5:21
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
9 thường được coi là không an toàn vì nó sẽ chạy bất kỳ mã nào mà nó lấy làm đầu vào trên thiết bị của khách hàng với đầy đủ các đặc quyền của người gọi, bất kể mã đó có độc hại hay không. Nếu có khả năng chuỗi chạy
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
9 có thể bị ảnh hưởng bởi một bên thứ ba độc hại, thì nó rất nguy hiểm, vì nó sẽ có tất cả các quyền mà người dùng của bạn đã cấp trang web. Ví dụ: Evil User X có thể đã viết một tập lệnh mà ứng dụng của bạn đã phục vụ một cách ngây thơ cho trình duyệt của người dùng Y, nơi nó được chạy với
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
9. If there is a possibility that the string
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
9 runs could have been affected by a malicious third party, then it is dangerous, as it will have all the permissions your user has granted the webpage. For example, evil user X might have written a script which your app
innocently served to user Y's browser, where it is run with
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
9.
Tuy nhiên, trong trường hợp của bạn, vì bạn không phục vụ dữ liệu từ người dùng này sang người dùng khác, nên không có khả năng chuỗi có thể bị ảnh hưởng bởi bên thứ ba và việc sử dụng
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
9 là điều hoàn toàn ổn. Xem câu hỏi này. Tuy nhiên, Eval tương đối kém hiệu quả so với thay thế
3. Chức năng, mặc dù vẫn không an toàn, nhưng an toàn hơn, nhưng chúng tôi đã xác định rằng loại lỗ hổng này không áp dụng cho trường hợp sử dụng của bạn. Quan trọng hơn là thực tế là (ít nhất là theo tài liệu MDN),
Đã trả lời ngày 12 tháng 7 năm 2020 lúc 5:29Jul 12, 2020 at 5:29
solanki...solanki...solanki...
4.6822 Huy hiệu vàng25 Huy hiệu bạc29 Huy hiệu đồng2 gold badges25 silver badges29 bronze badges
Chức năng có thể giúp。
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
Đã trả lời ngày 12 tháng 7 năm 2020 lúc 5:47Jul 12, 2020 at 5:47
Cách 'chính xác' nhất để làm điều này (điều đó sẽ không dễ bị ảnh hưởng bởi những thứ như
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
4) là sử dụng thư viện trình đánh giá biểu thức như MathJS
Đã trả lời ngày 12 tháng 7 năm 2020 lúc 5:55Jul 12, 2020 at 5:55
RubydesicrubydesicRubydesic
3.21212 Huy hiệu bạc26 Huy hiệu đồng12 silver badges26 bronze badges
" Trước
Tiếp theo "
Biểu thức chính quy là các mẫu được sử dụng để phù hợp với kết hợp ký tự trong chuỗi. Trong JavaScript, các biểu thức chính quy cũng là đối tượng. Các mẫu này được sử dụng với các phương pháp
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
5 và
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
6 của
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
7 và với
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
8,
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
9,
const re =newRegExp('ab+c');
0,
const re =newRegExp('ab+c');
1,
const re =newRegExp('ab+c');
2 và
const re =newRegExp('ab+c');
3 của
const re =newRegExp('ab+c');
4. Chương này mô tả các biểu thức thường xuyên của JavaScript.
Tạo một biểu thức chính quy
Bạn xây dựng một biểu thức chính quy theo một trong hai cách:
Sử dụng một biểu thức thông thường theo nghĩa đen, bao gồm một mẫu được bao quanh giữa các dấu gạch chéo, như sau: Biểu thức thông thường theo nghĩa đen cung cấp tổng hợp biểu thức chính quy khi tập lệnh được tải. Nếu biểu thức chính quy không đổi, sử dụng điều này có thể cải thiện hiệu suất.
Hoặc gọi hàm hàm tạo của đối tượng
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
7, như sau:
const re =newRegExp('ab+c');
Sử dụng hàm Constructor cung cấp biên dịch thời gian chạy của biểu thức chính quy. Sử dụng chức năng Constructor khi bạn biết mẫu biểu thức chính quy sẽ thay đổi hoặc bạn không biết mẫu và đang lấy nó từ một nguồn khác, chẳng hạn như đầu vào của người dùng.
Viết một mẫu biểu thức chính quy
Một mẫu biểu thức chính quy bao gồm các ký tự đơn giản, chẳng hạn như
const re =newRegExp('ab+c');
6 hoặc kết hợp các ký tự đơn giản và đặc biệt, chẳng hạn như
const re =newRegExp('ab+c');
7 hoặc
const re =newRegExp('ab+c');
8. Ví dụ cuối cùng bao gồm dấu ngoặc đơn, được sử dụng làm thiết bị bộ nhớ. Trận đấu được thực hiện với phần này của mẫu được ghi nhớ để sử dụng sau, như được mô tả trong các nhóm sử dụng.
Lưu ý: Nếu bạn đã quen thuộc với các hình thức của một biểu thức thông thường, bạn cũng có thể đọc tờ Cheatese để tìm kiếm nhanh chóng cho một mẫu/cấu trúc cụ thể. If you are already familiar with the forms of a regular expression, you may also read
the cheatsheet for a quick lookup for a specific pattern/construct.
Sử dụng các mẫu đơn giản
Các mẫu đơn giản được xây dựng từ các ký tự mà bạn muốn tìm một trận đấu trực tiếp. Ví dụ, mẫu
const re =newRegExp('ab+c');
6 chỉ khớp với các kết hợp ký tự trong các chuỗi chỉ khi chuỗi chính xác
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
0 xảy ra (tất cả các ký tự với nhau và theo thứ tự đó). Một trận đấu như vậy sẽ thành công trong chuỗi
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
1 và
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
2. Trong cả hai trường hợp, trận đấu là với chuỗi con
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
0. Không có khớp trong chuỗi
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
4 bởi vì trong khi nó chứa chuỗi con
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
5, nó không chứa phần phụ chính xác
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
0.
Sử dụng các ký tự đặc biệt
Khi tìm kiếm một trận đấu đòi hỏi một cái gì đó nhiều hơn một trận đấu trực tiếp, chẳng hạn như tìm một hoặc nhiều B hoặc tìm không gian trắng, bạn có thể bao gồm các ký tự đặc biệt trong mẫu. Ví dụ: để khớp với một
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
7 theo sau là 0 hoặc nhiều
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
8 sau đó là
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
Các trang sau cung cấp danh sách các ký tự đặc biệt khác nhau phù hợp với từng danh mục, cùng với các mô tả và ví dụ.
Xác nhận
Các xác nhận bao gồm các ranh giới, chỉ ra sự khởi đầu và kết thúc của các dòng và từ, và các mẫu khác chỉ ra theo một cách nào đó mà một trận đấu là có thể (bao gồm cả hướng trước, nhìn về phía sau và các biểu thức có điều kiện).
Các lớp nhân vật
Phân biệt các loại ký tự khác nhau. Ví dụ, phân biệt giữa các chữ cái và chữ số.
Nhóm và backreferences
Nhóm nhóm nhiều mẫu nói chung và các nhóm thu thập cung cấp thêm thông tin bài hát khi sử dụng mẫu biểu thức chính quy để khớp với chuỗi. BackReferences đề cập đến một nhóm đã bị bắt trước đó trong cùng một biểu thức chính quy.
Định lượng
Chỉ ra số lượng ký tự hoặc biểu thức để khớp.
Tài sản Unicode thoát ra
Phân biệt dựa trên các thuộc tính ký tự unicode, ví dụ, các chữ cái trên và chữ cái, ký hiệu toán học và dấu câu.
Nếu bạn muốn xem tất cả các ký tự đặc biệt có thể được sử dụng trong các biểu thức thông thường trong một bảng, hãy xem phần sau:
const myArray =/d(b+)d/g.exec('cdbbdbsbz');// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
0,
const myArray =/d(b+)d/g.exec('cdbbdbsbz');// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
1,
const myArray =/d(b+)d/g.exec('cdbbdbsbz');// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
2,
const myArray =/d(b+)d/g.exec('cdbbdbsbz');// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
3,
const myArray =/d(b+)d/g.exec('cdbbdbsbz');// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
4,
const myArray =/d(b+)d/g.exec('cdbbdbsbz');// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
5,
const myArray =/d(b+)d/g.exec('cdbbdbsbz');// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
6, ____.
Các lớp nhân vật
Phân biệt các loại ký tự khác nhau. Ví dụ, phân biệt giữa các chữ cái và chữ số.
Xác nhận
Nhóm và backreferences
Nhóm và backreferences
Nhóm nhóm nhiều mẫu nói chung và các nhóm thu thập cung cấp thêm thông tin bài hát khi sử dụng mẫu biểu thức chính quy để khớp với chuỗi. BackReferences đề cập đến một nhóm đã bị bắt trước đó trong cùng một biểu thức chính quy.
Định lượng
Chỉ ra số lượng ký tự hoặc biểu thức để khớp.
Tài sản Unicode thoát ra
Phân biệt dựa trên các thuộc tính ký tự unicode, ví dụ, các chữ cái trên và chữ cái, ký hiệu toán học và dấu câu.
Nếu bạn muốn xem tất cả các ký tự đặc biệt có thể được sử dụng trong các biểu thức thông thường trong một bảng, hãy xem phần sau:
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
0,
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
1
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
2,
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
3,
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
4,
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
5,
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
6,
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
7,
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
05,
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
06
Tài sản Unicode thoát ra
Trốn thoát
Nếu bạn cần sử dụng bất kỳ ký tự đặc biệt nào theo nghĩa đen (ví dụ thực sự tìm kiếm
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
07), bạn phải thoát khỏi nó bằng cách đặt dấu gạch chéo ngược trước nó. Chẳng hạn, để tìm kiếm
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
7, sau đó là
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
07 sau đó là
functionescapeRegExp(string){return string.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');// $& means the whole matched string}
8, bạn sẽ sử dụng
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
11 - dấu gạch chéo ngược "thoát ra"
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
07, làm cho nó theo nghĩa đen thay vì đặc biệt.
Tương tự, nếu bạn đang viết một biểu thức thông thường theo nghĩa đen và cần phải kết hợp một dấu gạch chéo ("/"), bạn cần thoát khỏi điều đó (nếu không, nó sẽ chấm dứt mẫu). Chẳng hạn, để tìm kiếm chuỗi "/ví dụ/" Theo sau là một hoặc nhiều ký tự chữ cái, bạn sẽ sử dụng ____ 113, các dấu gạch chéo ngược trước mỗi lần cắt làm cho chúng theo nghĩa đen.
Để phù hợp với một dấu gạch chéo ngược theo nghĩa đen, bạn cần thoát khỏi dấu gạch chéo ngược. Chẳng hạn, để khớp với chuỗi "C: \" trong đó "C" có thể là bất kỳ chữ cái nào, bạn sẽ sử dụng
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
14 - BackSlash đầu tiên thoát khỏi chữ cái sau đó, do đó, biểu thức tìm kiếm một dấu gạch chéo ngược.
Nếu sử dụng hàm tạo
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
7 với một chuỗi theo nghĩa đen, hãy nhớ rằng dấu gạch chéo ngược là một lối thoát trong các chuỗi chữ, vì vậy để sử dụng nó trong biểu thức thông thường, bạn cần thoát nó ở cấp độ theo nghĩa đen.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
11 và
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
17 Tạo cùng một biểu thức, tìm kiếm "A" theo nghĩa đen "*" theo sau là "B".
Nếu chuỗi thoát chưa phải là một phần trong mẫu của bạn, bạn có thể thêm chúng bằng cách sử dụng
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
18:
"G" sau khi biểu thức thông thường là một tùy chọn hoặc cờ thực hiện tìm kiếm toàn cầu, nhìn vào toàn bộ chuỗi và trả về tất cả các trận đấu. Nó được giải thích chi tiết dưới đây trong tìm kiếm nâng cao với cờ.
Tại sao điều này không được xây dựng trong JavaScript? Có một đề xuất để thêm một chức năng như vậy vào regexp.
Sử dụng dấu ngoặc đơn
Điểm dừng xung quanh bất kỳ phần nào của mẫu biểu thức chính quy gây ra một phần của chuỗi con phù hợp được ghi nhớ. Sau khi nhớ, phần phụ có thể được thu hồi cho việc sử dụng khác. Xem các nhóm và backrefer để biết thêm chi tiết.
Sử dụng các biểu thức chính quy trong JavaScript
Các biểu thức chính quy được sử dụng với các phương pháp
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
7
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
6 và
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
5 và với các phương thức
const re =newRegExp('ab+c');
4
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
8,
const re =newRegExp('ab+c');
0,
const re =newRegExp('ab+c');
2 và
const re =newRegExp('ab+c');
3.
Phương pháp
Sự mô tả
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
5
Thực hiện tìm kiếm cho một trận đấu trong một chuỗi. Nó trả về một mảng thông tin hoặc
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
28 trên sự không phù hợp.
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
6
const re =newRegExp('ab+c');
3
Sử dụng một biểu thức chính quy hoặc một chuỗi cố định để chia một chuỗi thành một mảng các chuỗi con.
Khi bạn muốn biết liệu một mẫu được tìm thấy trong một chuỗi, hãy sử dụng các phương thức
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
6 hoặc
const re =newRegExp('ab+c');
2; Để biết thêm thông tin (nhưng thực hiện chậm hơn) sử dụng các phương thức
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
5 hoặc
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
8. Nếu bạn sử dụng
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
5 hoặc
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
8 và nếu trận đấu thành công, các phương thức này sẽ trả về một mảng và các thuộc tính cập nhật của đối tượng biểu thức chính quy được liên kết và cả đối tượng biểu thức chính quy được xác định trước,
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
7. Nếu trận đấu không thành công, phương thức
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
5 trả về
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
28 (ép buộc thành
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
31).
Trong ví dụ sau, tập lệnh sử dụng phương thức
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
Với các tập lệnh này, trận đấu thành công và trả về mảng và cập nhật các thuộc tính được hiển thị trong bảng sau.
Kết quả thực thi biểu thức thường xuyên.
Sự vật
Tài sản hoặc chỉ mục
Sự mô tả
Trong ví dụ này
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
51
Chuỗi phù hợp và tất cả các chuỗi con được ghi nhớ.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
54
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
55
Chỉ số dựa trên 0 của trận đấu trong chuỗi đầu vào.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
56
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
57
Chuỗi ban đầu.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
58
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
59
Các ký tự phù hợp cuối cùng.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
60
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
61
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
62
Chỉ số để bắt đầu trận đấu tiếp theo. (Thuộc tính này chỉ được đặt nếu biểu thức thông thường sử dụng tùy chọn G, được mô tả trong tìm kiếm nâng cao bằng cờ.)
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
63
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
64
Văn bản của mẫu. Cập nhật tại thời điểm biểu thức thông thường được tạo, không được thực thi.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
65
Như được hiển thị trong dạng thứ hai của ví dụ này, bạn có thể sử dụng một biểu thức chính quy được tạo bằng trình khởi tạo đối tượng mà không cần gán nó cho một biến. Tuy nhiên, nếu bạn làm, mọi sự 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 sử dụng biểu mẫu này mà không gán nó cho một biến, sau đó bạn không thể truy cập các thuộc tính của biểu thức thông thường đó. Ví dụ: giả sử bạn có tập lệnh này:
const myRe =/d(b+)d/g;const myArray = myRe.exec('cdbbdbsbz');
console.log(`The value of lastIndex is ${myRe.lastIndex}`);// "The value of lastIndex is 5"
Tuy nhiên, nếu bạn có tập lệnh này:
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
0
Sự xuất hiện của
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
66 trong hai câu lệnh là các đối tượng biểu thức chính quy khác nhau và do đó có các giá trị khác nhau cho thuộc tính
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
62 của chúng. Nếu bạn cần truy cập các thuộc tính của biểu thức chính quy được tạo bằng trình khởi tạo đối tượng, trước tiên bạn nên gán nó cho một biến.
Tìm kiếm nâng cao với cờ
Biểu thức chính quy có các cờ tùy chọn cho phép chức năng như tìm kiếm toàn cầu và tìm kiếm không nhạy cảm trường hợp. Những lá cờ này có thể được sử dụng riêng biệt hoặc cùng nhau theo bất kỳ thứ tự nào, và được bao gồm như một phần của biểu thức thông thường.
Lá cờ
Sự mô tả
Trong ví dụ này
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
51
Chuỗi phù hợp và tất cả các chuỗi con được ghi nhớ.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
54
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
55
Chỉ số dựa trên 0 của trận đấu trong chuỗi đầu vào.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
56
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
57
Chuỗi ban đầu.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
58
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
59
Các ký tự phù hợp cuối cùng.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
60
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
61
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
62
Chỉ số để bắt đầu trận đấu tiếp theo. (Thuộc tính này chỉ được đặt nếu biểu thức thông thường sử dụng tùy chọn G, được mô tả trong tìm kiếm nâng cao bằng cờ.)
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
63
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
64
Văn bản của mẫu. Cập nhật tại thời điểm biểu thức thông thường được tạo, không được thực thi.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
65
Như được hiển thị trong dạng thứ hai của ví dụ này, bạn có thể sử dụng một biểu thức chính quy được tạo bằng trình khởi tạo đối tượng mà không cần gán nó cho một biến. Tuy nhiên, nếu bạn làm, mọi sự 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 sử dụng biểu mẫu này mà không gán nó cho một biến, sau đó bạn không thể truy cập các thuộc tính của biểu thức thông thường đó. Ví dụ: giả sử bạn có tập lệnh này:
Tuy nhiên, nếu bạn có tập lệnh này:
Sự xuất hiện của
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
66 trong hai câu lệnh là các đối tượng biểu thức chính quy khác nhau và do đó có các giá trị khác nhau cho thuộc tính
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
62 của chúng. Nếu bạn cần truy cập các thuộc tính của biểu thức chính quy được tạo bằng trình khởi tạo đối tượng, trước tiên bạn nên gán nó cho một biến.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
1
Tìm kiếm nâng cao với cờ
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
2
Biểu thức chính quy có các cờ tùy chọn cho phép chức năng như tìm kiếm toàn cầu và tìm kiếm không nhạy cảm trường hợp. Những lá cờ này có thể được sử dụng riêng biệt hoặc cùng nhau theo bất kỳ thứ tự nào, và được bao gồm như một phần của biểu thức thông thường.
Lá cờ
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
3
Tài sản tương ứng
with:
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
4
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
68
Tạo các chỉ số cho các trận đấu chuỗi con.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
69
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
70
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
5
Tìm kiếm toàn cầu.
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
6
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
71
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
72
Ví dụ: biểu thức chính quy sau đây có thể được sử dụng để khớp với một "từ" unicode tùy ý: từ ":
Có một số khác biệt khác giữa các biểu thức chính quy Unicode và Nonicode mà người ta nên biết:
Các biểu thức chính quy của Unicode không hỗ trợ cái gọi là "thoát khỏi danh tính"; Đó là, các mô hình không cần phải bỏ qua một dấu gạch chéo ngược và bị bỏ qua một cách hiệu quả. Ví dụ:
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
93 là một biểu thức chính quy hợp lệ khớp với chữ 'A', nhưng
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
94 thì không.
Giá đỡ xoăn cần phải được thoát ra khi không được sử dụng làm định lượng. Ví dụ,
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
95 là một biểu thức chính quy hợp lệ khớp với khung xoăn '{', nhưng
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
96 thì không - thay vào đó, khung nên được thoát ra và
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
97 nên được sử dụng thay thế.
Nhân vật
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
98 được giải thích khác nhau trong các lớp ký tự. Cụ thể, đối với các biểu thức chính quy Unicode,
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
98 được hiểu là một
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
98 theo nghĩa đen (và không phải là một phần của phạm vi) chỉ khi nó xuất hiện ở đầu hoặc cuối của lớp ký tự. Ví dụ:
Lưu ý: Một số ví dụ cũng có sẵn trong: Several examples are also available in:
Các trang tham chiếu cho
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
5,
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
6,
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
8,
const fun = new Function('a', 'b', 'return a + b')
console.log(fun(1, 2)) // output: 3
9,
const re =newRegExp('ab+c');
2,
const re =newRegExp('ab+c');
0,
const re =newRegExp('ab+c');
3
Các bài viết hướng dẫn: Các lớp nhân vật, xác nhận, nhóm và backrefer, định lượng, tài sản Unicode thoát khỏi
Sử dụng các ký tự đặc biệt để xác minh đầu vào
Trong ví dụ sau, người dùng dự kiến sẽ nhập số điện thoại. Khi người dùng nhấn nút "Kiểm tra", tập lệnh sẽ kiểm tra tính hợp lệ của số. Nếu số là hợp lệ (khớp với chuỗi ký tự được chỉ định bởi biểu thức chính quy), tập lệnh hiển thị một thông báo cảm ơn người dùng và xác nhận số. Nếu số không hợp lệ, tập lệnh thông báo cho người dùng rằng số điện thoại không hợp lệ.