Hướng dẫn filter alternative javascript - lọc javascript thay thế

I am trying to return an array of the names who are not enabled.

let arr = [
   { enabled: false, name: 'Cal'},
   { enabled: true, name: 'John'},
   { enabled: false, name: 'Phil'},
   { enabled: true, name: 'Pierre'}
]

I am doing so with:

 arr.filter(x => x.enabled).map(y => y.name)

Is there a cleaner way of doing this?

3

Nội dung chính ShowShow

  • Tạo một biểu thức chính quy
  • Viết một mẫu biểu thức chính quy
  • Sử dụng các mẫu đơn giản
  • Sử dụng các ký tự đặc biệt
  • Trốn thoát
  • Sử dụng dấu ngoặc đơn
  • Sử dụng các biểu thức chính quy trong JavaScript
  • Tìm kiếm nâng cao với cờ
  • Sử dụng các ký tự đặc biệt để xác minh đầu vào

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more.
Learn more.

Tôi đang cố gắng phát triển một phương thức để khớp các từ trong mảng (fitems) với các từ từ một chuỗi đã được chuyển đổi thành một mảng (StringArray). Mã tôi có dưới đây hoạt động hầu hết thời gian, nhưng rắc rối là 'bao gồm ()' tìm kiếm các mẫu, thay vì khớp toàn bộ từ.

Như một ví dụ. Nó sẽ bối rối nếu tôi đang tìm kiếm 'tường' và nó trả về 'ví'. Ngoài ra, tôi muốn đầu vào linh hoạt. Vì vậy, ví dụ, nếu kính được nhập, vật phẩm 'Shard thủy tinh' vẫn có thể trả lại.

Có cách chính xác hơn để phù hợp với các từ chính xác?

for (let i = 0; i < db.items.length; i++) {
		for (let j = 0; j < stringArray.length; j++) {
			if (db.items[i].name.includes(stringArray[j])) {
				fItems.push(db.items[i]);
			};
		}
	};

Pavlo

41.3K13 Huy hiệu vàng75 Huy hiệu bạc109 Huy hiệu đồng13 gold badges75 silver badges109 bronze badges13 gold badges75 silver badges109 bronze badges

hỏi ngày 10 tháng 2 năm 2017 lúc 10:44Feb 10, 2017 at 10:44Feb 10, 2017 at 10:44

5

từ bình luận

Không, không phải là một so sánh thẳng. Tôi muốn đầu vào linh hoạt. Vì vậy, ví dụ, nếu kính được nhập, vật phẩm 'Shard thủy tinh' vẫn có thể trả lại.

Có vẻ như những gì bạn thực sự sau đó là khớp mẫu trong một chuỗi. Một biểu thức thông thường sẽ là điều tốt nhất để sử dụng cho điều đó vì đây là lý do tại sao chúng được tạo ra (khớp mẫu với tùy chọn thay thế).

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive

Trong mã trên

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
1 được sử dụng để biểu thị một ranh giới từ nên
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
2 là một trận đấu nhưng
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
3 sẽ không được khớp.
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
4 được sử dụng để chỉ định trường hợp không nhạy cảm.

Ngoài ra, để kiểm tra các biểu thức của bạn trực tuyến trước khi bạn đặt chúng vào mã của bạn, bạn có thể sử dụng trang web này https://regex101.com/, tôi sử dụng điều này mọi lúc để xác minh các biểu thức tôi xây dựng là chính xác.

Đã trả lời ngày 10 tháng 2 năm 2017 lúc 10:54Feb 10, 2017 at 10:54Feb 10, 2017 at 10:54

IgorigorIgorIgor

59.2K10 Huy hiệu vàng93 Huy hiệu bạc164 Huy hiệu đồng10 gold badges93 silver badges164 bronze badges10 gold badges93 silver badges164 bronze badges

7

Tôi nghĩ rằng bạn có thể sử dụng các phương thức

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
5 và
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
6 thay vì nó. Sau khi chia, bạn có thể kiểm tra nó với Indexof.

Từ bình luận: Như Pavlo đã nói, bạn cũng có thể sử dụng

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
7, thay vì phương pháp
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
6.
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };

Đã trả lời ngày 10 tháng 2 năm 2017 lúc 10:59Feb 10, 2017 at 10:59Feb 10, 2017 at 10:59

Kamuran Sönecekkamuran SönecekKamuran SönecekKamuran Sönecek

3.3102 Huy hiệu vàng28 Huy hiệu bạc54 Huy hiệu Đồng2 gold badges28 silver badges54 bronze badges2 gold badges28 silver badges54 bronze badges

3

Tạo hàm chấm và sử dụng nó giống như ES6 bao gồm () trong ES5 như dưới đây:

 arr.filter(x => x.enabled).map(y => y.name)
3

Sau đây là chuỗi

 arr.filter(x => x.enabled).map(y => y.name)
4

Kiểm tra trận đấu như sau:

 arr.filter(x => x.enabled).map(y => y.name)
5

Bây giờ bạn có thể thêm cái này cho ES5 bằng cách sử dụng cùng một chỉ mục trong bao gồm cách

Đã trả lời ngày 31 tháng 3 lúc 14:08Mar 31 at 14:08Mar 31 at 14:08

ParameshwarParameshwarParameshwarParameshwar

7116 Huy hiệu bạc13 Huy hiệu đồng6 silver badges13 bronze badges6 silver badges13 bronze badges

  • " Trước
  • Tiếp theo "

Nội dung chính Show

Tạo một biểu thức chính quy

Tạo một biểu thức chính quy

Viết một mẫu biểu thức chính quy

  • Sử dụng các mẫu đơn giản
  • Sử dụng các ký tự đặc biệt

Viết một mẫu biểu thức chính quy

Sử dụng các mẫu đơn giản

 arr.filter(x => x.enabled).map(y => y.name)
40 hoặc kết hợp các ký tự đơn giản và đặc biệt, chẳng hạn như
 arr.filter(x => x.enabled).map(y => y.name)
41 hoặc
 arr.filter(x => x.enabled).map(y => y.name)
42. 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. 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

 arr.filter(x => x.enabled).map(y => y.name)
40 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
 arr.filter(x => x.enabled).map(y => y.name)
44 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
 arr.filter(x => x.enabled).map(y => y.name)
45 và
 arr.filter(x => x.enabled).map(y => y.name)
46. Trong cả hai trường hợp, trận đấu là với chuỗi con
 arr.filter(x => x.enabled).map(y => y.name)
44. Không có khớp trong chuỗi
 arr.filter(x => x.enabled).map(y => y.name)
48 bởi vì trong khi nó chứa chuỗi con
 arr.filter(x => x.enabled).map(y => y.name)
49, nó không chứa bộ nền chính xác
 arr.filter(x => x.enabled).map(y => y.name)
44.

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

 arr.filter(x => x.enabled).map(y => y.name)
51 theo sau là 0 hoặc nhiều
 arr.filter(x => x.enabled).map(y => y.name)
52 sau đó là
 arr.filter(x => x.enabled).map(y => y.name)
53, bạn sẽ sử dụng mẫu
 arr.filter(x => x.enabled).map(y => y.name)
41:
 arr.filter(x => x.enabled).map(y => y.name)
55 sau
 arr.filter(x => x.enabled).map(y => y.name)
52 có nghĩa là "0 hoặc nhiều hơn các mục trước của mục trước." Trong chuỗi
 arr.filter(x => x.enabled).map(y => y.name)
57, mẫu này sẽ khớp với bộ nền
 arr.filter(x => x.enabled).map(y => y.name)
58.

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:

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

 arr.filter(x => x.enabled).map(y => y.name)
59), 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
 arr.filter(x => x.enabled).map(y => y.name)
51 sau đó là
 arr.filter(x => x.enabled).map(y => y.name)
59 sau đó là
 arr.filter(x => x.enabled).map(y => y.name)
52, bạn sẽ sử dụng
for (let i = 0; i < db.items.length; i++) {
		for (let j = 0; j < stringArray.length; j++) {
			if (db.items[i].name.includes(stringArray[j])) {
				fItems.push(db.items[i]);
			};
		}
	};
73 - dấu gạch chéo ngược "thoát ra"
 arr.filter(x => x.enabled).map(y => y.name)
59, 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 ____ ____ 65, 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

for (let i = 0; i < db.items.length; i++) {
		for (let j = 0; j < stringArray.length; j++) {
			if (db.items[i].name.includes(stringArray[j])) {
				fItems.push(db.items[i]);
			};
		}
	};
76 - 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

 arr.filter(x => x.enabled).map(y => y.name)
31 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.
for (let i = 0; i < db.items.length; i++) {
		for (let j = 0; j < stringArray.length; j++) {
			if (db.items[i].name.includes(stringArray[j])) {
				fItems.push(db.items[i]);
			};
		}
	};
73 và
for (let i = 0; i < db.items.length; i++) {
		for (let j = 0; j < stringArray.length; j++) {
			if (db.items[i].name.includes(stringArray[j])) {
				fItems.push(db.items[i]);
			};
		}
	};
79 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

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
70:
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
7

"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

 arr.filter(x => x.enabled).map(y => y.name)
31
 arr.filter(x => x.enabled).map(y => y.name)
30 và
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
9 và với các phương pháp
 arr.filter(x => x.enabled).map(y => y.name)
38
 arr.filter(x => x.enabled).map(y => y.name)
32,
 arr.filter(x => x.enabled).map(y => y.name)
3 4,
 arr.filter(x => x.enabled).map(y => y.name)
36 và
 arr.filter(x => x.enabled).map(y => y.name)
37.

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

 arr.filter(x => x.enabled).map(y => y.name)
30 hoặc
 arr.filter(x => x.enabled).map(y => y.name)
36; Để 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
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
9 hoặc
 arr.filter(x => x.enabled).map(y => y.name)
32. Nếu bạn sử dụng
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
9 hoặc
 arr.filter(x => x.enabled).map(y => y.name)
32 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,
 arr.filter(x => x.enabled).map(y => y.name)
31. Nếu trận đấu không thành công, phương thức
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
9 trả về
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
57 (ép buộc thành
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
58).

Trong ví dụ sau, tập lệnh sử dụng phương thức

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
9 để tìm kết hợp trong một chuỗi.
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
5

Nếu bạn không cần truy cập các thuộc tính của biểu thức thông thường, một cách khác để tạo

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
90 là với tập lệnh này:
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
9

(Xem bằng cách sử dụng cờ tìm kiếm toàn cầu với

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
9 để biết thêm thông tin về các hành vi khác nhau.)

Nếu bạn muốn xây dựng biểu thức thông thường từ một chuỗi, nhưng một giải pháp khác là tập lệnh này:

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
0

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.

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:

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
1

Tuy nhiên, nếu bạn có tập lệnh này:

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
2

Sự xuất hiện của

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
92 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
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
93 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.

Để bao gồm một lá cờ có biểu thức thông thường, hãy sử dụng cú pháp này:

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
3

hoặc

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
4

Lưu ý rằng các cờ là một phần không thể thiếu của biểu thức chính quy. Họ không thể được thêm hoặc loại bỏ sau này.

Ví dụ,

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
94 tạo ra một biểu thức chính quy tìm kiếm một hoặc nhiều ký tự theo sau là một không gian và nó tìm kiếm sự kết hợp này trong suốt chuỗi.
let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
5

Bạn có thể thay thế dòng:

with:

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
6

và nhận được kết quả tương tự.

Cờ

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
95 được sử dụng để chỉ định rằng một chuỗi đầu vào đa dòng nên được coi là nhiều dòng. Nếu cờ
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
95 được sử dụng,
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
97 và
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
98 khớp khi bắt đầu hoặc kết thúc bất kỳ dòng nào trong chuỗi đầu vào thay vì bắt đầu hoặc kết thúc toàn bộ chuỗi.

Sử dụng cờ tìm kiếm toàn cầu với Exec ()

Phương thức

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
99 với cờ
let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
00 trả về mỗi trận đấu và vị trí của nó lặp đi lặp lại.
let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
7

Ngược lại, phương thức

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
01 trả về tất cả các trận đấu cùng một lúc, nhưng không có vị trí của chúng.
let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
8

Sử dụng các biểu thức chính quy Unicode

Cờ "U" được sử dụng để tạo các biểu thức chính quy "unicode"; Đó là, các biểu thức thường xuyên hỗ trợ khớp với văn bản Unicode. Điều này chủ yếu được thực hiện thông qua việc sử dụng các Escapes thuộc tính Unicode, chỉ được hỗ trợ trong các biểu thức chính quy "Unicode".

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 str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    02 là một biểu thức chính quy hợp lệ khớp với chữ 'A', nhưng
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    03 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 str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    04 là một biểu thức chính quy hợp lệ khớp với giá đỡ xoăn '{', nhưng
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    05 thì không - thay vào đó, khung nên được thoát ra và
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    06 nên được sử dụng thay thế.
  • Nhân vật
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    07 đượ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 str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    07 được hiểu là một ____10107 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ụ,
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    10 là một biểu thức chính quy hợp lệ khớp với ký tự từ,
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    07 hoặc
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    12, nhưng
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    13 là một biểu thức chính quy không hợp lệ, vì
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    14 đến
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    12 không phải là một phạm vi ký tự được xác định rõ.

Các biểu thức chính quy của Unicode cũng có hành vi thực thi khác nhau là tốt.

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
16 chứa nhiều lời giải thích hơn về điều này.

Ví dụ

Lưu ý: Một số ví dụ cũng có sẵn trong: Several examples are also available in: Several examples are also available in:

  • Các trang tham chiếu cho
    for (let i = 0; i < db.items.length; i++) {
            for (let j = 0; j < stringArray.length; j++) {
                if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                    fItems.push(db.items[i]);
                };
            }
        };
    
    9,
     arr.filter(x => x.enabled).map(y => y.name)
    
    30,
     arr.filter(x => x.enabled).map(y => y.name)
    
    32,
     arr.filter(x => x.enabled).map(y => y.name)
    
    33,
     arr.filter(x => x.enabled).map(y => y.name)
    
    36,
     arr.filter(x => x.enabled).map(y => y.name)
    
    34,
     arr.filter(x => x.enabled).map(y => y.name)
    
    37
  • 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ệ.

Biểu thức chính quy tìm kiếm:

  1. Sự khởi đầu của dòng dữ liệu:
    for (let i = 0; i < db.items.length; i++) {
            for (let j = 0; j < stringArray.length; j++) {
                if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                    fItems.push(db.items[i]);
                };
            }
        };
    
    97
  2. tiếp theo là ba ký tự số
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    25 hoặc
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    26 Một dấu ngoặc trái
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    27, tiếp theo là ba chữ số
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    25, tiếp theo là dấu ngoặc đơn gần
  3. tiếp theo là một dấu gạch ngang, chém về phía trước hoặc dấu thập phân trong một nhóm bắt giữ
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    31
  4. tiếp theo là ba chữ số
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    25
  5. tiếp theo là trận đấu được ghi nhớ trong nhóm (đầu tiên) bị bắt
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    33
  6. tiếp theo là bốn chữ số
    let str = 'The glass shard';
    let search = 'glass';
    let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive
    
    // If you use unicode characters then this might be a better expression
    // thank you @Touffy
    let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
    
    34
  7. theo sau là kết thúc dòng dữ liệu:
    for (let i = 0; i < db.items.length; i++) {
            for (let j = 0; j < stringArray.length; j++) {
                if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                    fItems.push(db.items[i]);
                };
            }
        };
    
    98

HTML

let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
9

JavaScript

for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };
0

Kết quả

REGEXR

Một công cụ trực tuyến để tìm hiểu, xây dựng và kiểm tra các biểu thức thường xuyên.

REGEX TESTER

Một trình xây dựng/trình xây dựng regex trực tuyến

Hướng dẫn tương tác Regex

Một hướng dẫn tương tác trực tuyến, gian lận, & sân chơi.

REGEX Visualizer

Một người thử nghiệm trực quan trực tuyến.

  • " Trước
  • Tiếp theo "