Một cách khác là KMP [KnuthTHER Morris, Fratt].
Thuật toán KMP tìm kiếm một chuỗi con dài-M trong chuỗi độ dài-N trong trường hợp xấu nhất O [N+M], so với trường hợp xấu nhất của O [N⋅m] cho thuật toán ngây thơ Hãy hợp lý nếu bạn quan tâm đến sự phức tạp trong trường hợp xấu nhất.
Dưới đây là triển khai JavaScript của Project Nayuki, được lấy từ //www.nayuki.io/res/knuth-morris-pratt-string-pratching/kmp-string-patcher.js:
// Searches for the given pattern string in the given text string using the Knuth-Morris-Pratt string matching algorithm.
// If the pattern is found, this returns the index of the start of the earliest match in 'text'. Otherwise -1 is returned.
function kmpSearch[pattern, text] {
if [pattern.length == 0]
return 0; // Immediate match
// Compute longest suffix-prefix table
var lsp = [0]; // Base case
for [var i = 1; i < pattern.length; i++] {
var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP
while [j > 0 && pattern[i] !== pattern[j]]
j = lsp[j - 1];
if [pattern[i] === pattern[j]]
j++;
lsp.push[j];
}
// Walk through text string
var j = 0; // Number of chars matched in pattern
for [var i = 0; i < text.length; i++] {
while [j > 0 && text[i] != pattern[j]]
j = lsp[j - 1]; // Fall back in the pattern
if [text[i] == pattern[j]] {
j++; // Next char matched, increment position
if [j == pattern.length]
return i - [j - 1];
}
}
return -1; // Not found
}
console.log[kmpSearch['ays', 'haystack'] != -1] // true
console.log[kmpSearch['asdf', 'haystack'] != -1] // false
Ví dụ
Kiểm tra xem một chuỗi bao gồm "Thế giới":
hãy để văn bản = "Xin chào thế giới, chào mừng bạn đến với vũ trụ."; Đặt kết quả = text.includes ["thế giới"];
let result = text.includes["world"];
Hãy tự mình thử »
hãy để văn bản = "Xin chào thế giới, chào mừng bạn đến với vũ trụ."; Đặt kết quả = text.includes ["thế giới", 12];
let result = text.includes["world", 12];
Hãy tự mình thử »
hãy để văn bản = "Xin chào thế giới, chào mừng bạn đến với vũ trụ."; Đặt kết quả = text.includes ["thế giới", 12];
Thêm ví dụ dưới đây.
Định nghĩa và cách sử dụng
Phương thức includes[]
trả về true
nếu một chuỗi chứa một chuỗi được chỉ định.
Nếu không, nó trả về false
.
Phương pháp includes[]
là trường hợp nhạy cảm.
Cú pháp
String.includes [searchValue, bắt đầu]
Thông số | Tham số |
Sự mô tả | SearchValue The string to search for. |
Yêu cầu. Chuỗi để tìm kiếm. | bắt đầu The position to start from. Default value is 0. |
Tùy chọn. Vị trí để bắt đầu từ giá trị.default là 0.
Giá trị trả về | Tham số |
Sự mô tả | SearchValue |
Yêu cầu. Chuỗi để tìm kiếm.
bắt đầu
Tùy chọn. Vị trí để bắt đầu từ giá trị.default là 0.
let result = text.includes["world", 12];
Hãy tự mình thử »
hãy để văn bản = "Xin chào thế giới, chào mừng bạn đến với vũ trụ."; Đặt kết quả = text.includes ["thế giới", 12];
Thêm ví dụ dưới đây.
Định nghĩa và cách sử dụng
Phương thức includes[] trả về true nếu một chuỗi chứa một chuỗi được chỉ định. | Nếu không, nó trả về false . | Phương pháp includes[] là trường hợp nhạy cảm. | Cú pháp | String.includes [searchValue, bắt đầu] |
Thông số | Thông số | Thông số | Thông số | Thông số |
Tham số
🏠 Quay trở lại trang chủ
JavaScript cung cấp nhiều cách để kiểm tra xem một chuỗi có chứa chuỗi con không. Tìm hiểu cách thức kinh điển, và cũng tìm hiểu tất cả các tùy chọn bạn có, sử dụng JavaScript đơn giản
Xuất bản ngày 01 tháng 5 năm 2018, cập nhật lần cuối vào ngày 30 tháng 5 năm 2019, Last Updated May 30 2019
Kiểm tra xem một chuỗi có chứa chuỗi con có phải là một trong những tác vụ phổ biến nhất trong bất kỳ ngôn ngữ lập trình nào.
JavaScript cung cấp các cách khác nhau để thực hiện thao tác này.
Một đơn giản nhất, và cũng là một chính tắc trong tương lai, là sử dụng phương thức includes[]
trên một chuỗi:
'a nice string'.includes['nice'] //true
Phương pháp này đã được giới thiệu trong ES6/ES2015.
Nó được hỗ trợ trong tất cả các trình duyệt hiện đại ngoại trừ Internet Explorer:
Để sử dụng nó trên tất cả các trình duyệt, sử dụng polyfill.io hoặc polyfill chuyên dụng khác.
includes[]
cũng chấp nhận tham số thứ hai tùy chọn, một số nguyên cho biết vị trí bắt đầu tìm kiếm:
'a nice string'.includes['nice'] //true
'a nice string'.includes['nice', 3] //false
'a nice string'.includes['nice', 2] //true
Pre-ES6 thay thế để bao gồm []: function kmpSearch[pattern, text] {
if [pattern.length == 0]
return 0; // Immediate match
// Compute longest suffix-prefix table
var lsp = [0]; // Base case
for [var i = 1; i < pattern.length; i++] {
var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP
while [j > 0 && pattern[i] !== pattern[j]]
j = lsp[j - 1];
if [pattern[i] === pattern[j]]
j++;
lsp.push[j];
}
// Walk through text string
var j = 0; // Number of chars matched in pattern
for [var i = 0; i < text.length; i++] {
while [j > 0 && text[i] != pattern[j]]
j = lsp[j - 1]; // Fall back in the pattern
if [text[i] == pattern[j]] {
j++; // Next char matched, increment position
if [j == pattern.length]
return i - [j - 1];
}
}
return -1; // Not found
}
console.log[kmpSearch['ays', 'haystack'] != -1] // true
console.log[kmpSearch['asdf', 'haystack'] != -1] // false
5
function kmpSearch[pattern, text] {
if [pattern.length == 0]
return 0; // Immediate match
// Compute longest suffix-prefix table
var lsp = [0]; // Base case
for [var i = 1; i < pattern.length; i++] {
var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP
while [j > 0 && pattern[i] !== pattern[j]]
j = lsp[j - 1];
if [pattern[i] === pattern[j]]
j++;
lsp.push[j];
}
// Walk through text string
var j = 0; // Number of chars matched in pattern
for [var i = 0; i < text.length; i++] {
while [j > 0 && text[i] != pattern[j]]
j = lsp[j - 1]; // Fall back in the pattern
if [text[i] == pattern[j]] {
j++; // Next char matched, increment position
if [j == pattern.length]
return i - [j - 1];
}
}
return -1; // Not found
}
console.log[kmpSearch['ays', 'haystack'] != -1] // true
console.log[kmpSearch['asdf', 'haystack'] != -1] // false
Pre -es6, cách phổ biến để kiểm tra xem một chuỗi có chứa chuỗi con có sử dụng
function kmpSearch[pattern, text] {
if [pattern.length == 0]
return 0; // Immediate match
// Compute longest suffix-prefix table
var lsp = [0]; // Base case
for [var i = 1; i < pattern.length; i++] {
var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP
while [j > 0 && pattern[i] !== pattern[j]]
j = lsp[j - 1];
if [pattern[i] === pattern[j]]
j++;
lsp.push[j];
}
// Walk through text string
var j = 0; // Number of chars matched in pattern
for [var i = 0; i < text.length; i++] {
while [j > 0 && text[i] != pattern[j]]
j = lsp[j - 1]; // Fall back in the pattern
if [text[i] == pattern[j]] {
j++; // Next char matched, increment position
if [j == pattern.length]
return i - [j - 1];
}
}
return -1; // Not found
}
console.log[kmpSearch['ays', 'haystack'] != -1] // true
console.log[kmpSearch['asdf', 'haystack'] != -1] // false
6 hay không, đây là phương thức chuỗi trả về -1 nếu chuỗi không chứa chuỗi con. Nếu phần phụ được tìm thấy, nó sẽ trả về chỉ mục của ký tự bắt đầu chuỗi.Giống như includes[]
, các tham số thứ hai đặt điểm bắt đầu:
'a nice string'.indexOf['nice'] !== -1 //true
'a nice string'.indexOf['nice', 3] !== -1 //false
'a nice string'.indexOf['nice', 2] !== -1 //true