str.match (regexp)

Phương thức str.match(regexp)tìm các kết quả phù hợp regexp trong chuỗi str.

Nó có 3 chế độ:

  • Nếu regexp không có cờ g, thì nó trả về kết quả phù hợp đầu tiên dưới dạng một mảng với các nhóm và thuộc tính bắt giữ index(vị trí của kết quả khớp), input(chuỗi đầu vào, bằng str):
  • Nếu regexpcờ có g, thì nó trả về một mảng tất cả các kết quả phù hợp dưới dạng chuỗi, mà không nắm bắt các nhóm và các chi tiết khác.
  • Nếu không có kết quả phù hợp, bất kể có cờ ghay không, nullsẽ được trả về.
// 1.có cờ g
var str = "I love JavaScript";

var result = str.match(/Java(Script)/);

alert( result[0] );     // JavaScript (full match)
alert( result[1] );     // Script (first capturing group)
alert( result.length ); // 2

// Additional information:
alert( result.index );  // 7 (match position)
alert( result.input );  // I love JavaScript (source string)

// 2.không có cờ g

var str = "I love JavaScript";

var result = str.match(/Java(Script)/g);

alert( result[0] ); // JavaScript
alert( result.length ); // 1

//3. null


let str = "I love JavaScript";

let result = str.match(/HTML/);

alert(result); // null
alert(result.length); // Error: Cannot read property 'length' of null
// fix: let result = str.match(regexp) || [];

 

str.matchAll (regexp)

Phương thức str.matchAll(regexp) này là một biến thể "mới hơn, được cải tiến" của str.match.

 

Có 3 điểm khác biệt so với match:

  • Nó trả về một đối tượng có thể lặp lại với các kết quả phù hợp thay vì một mảng. Chúng ta có thể tạo một mảng thông thường từ nó bằng cách sử dụng Array.from.
  • Mỗi trận đấu được trả về dưới dạng một mảng với các nhóm bắt (định dạng giống như str.matchkhông có cờ g).
  • Nếu không có kết quả, nó trả về một đối tượng rỗng có thể lặp lại thay vì null.
let str = '<h1>Hello, world!</h1>';
let regexp = /<(.*?)>/g;

let matchAll = str.matchAll(regexp);

alert(matchAll); // [object RegExp String Iterator], not array, but an iterable

matchAll = Array.from(matchAll); // array now

let firstMatch = matchAll[0];
alert( firstMatch[0] );  // <h1>
alert( firstMatch[1] );  // h1
alert( firstMatch.index );  // 0
alert( firstMatch.input );  // <h1>Hello, world!</h1>

str.split(regexp|substr, limit)

Split là tách chuỗi, Tách chuỗi bằng cách sử dụng regexp (hoặc một chuỗi con) làm dấu phân cách.

alert('12-34-56'.split('-')) // array of ['12', '34', '56']
alert('12, 34, 56'.split(/,\s*/)) // array of ['12', '34', '56']

str.search (regexp)

Phương thức str.search(regexp) trả về vị trí của kết quả phù hợp (nếu không tìm thấy là cho kết quả là -1)

let str = "A drop of ink may make a million think";

alert( str.search( /ink/i ) ); // 10 (vị trí phù hợp đầu tiên)

str.replace (str | regexp, str | func)

Đây là một phương thức chung để tìm kiếm và thay thế.


// thay dấu gạch ngan thành 2 chấm (replace a dash by a colon)
alert('12-34-56'.replace("-", ":")) // 12:34-56

// thay thế tất cả các dấu gạch ngang bằng dấu hai chấm(replace all dashes by a colon)
alert( '12-34-56'.replace( /-/g, ":" ) )  // 12:34:56



//Ký hiệu &	Hành động trong chuỗi thay thế
//$&	chèn toàn bộ match
//$`	chèn một phần của chuỗi trước match
//$'	chèn một phần của chuỗi sau match
//$n	nếu nlà số có 1-2 chữ số, sẽ chèn nội dung của nhóm chụp thứ n, để biết chi tiết, hãy xem Nhóm chụp
//$<name>	chèn nội dung của dấu ngoặc đơn với nội dung đã cho name, để biết chi tiết, hãy xem Chụp nhóm
//$$	chèn ký tự$

//Đối với các tình huống yêu cầu thay thế "thông minh", đối số thứ hai có thể là một hàm.

//Hàm được gọi với các đối số func(match, p1, p2, ..., pn, offset, input, groups):
//5. part:
		//1.match- ,
		//2.p1, p2, ..., pn- nội dung của các nhóm bắt (nếu có),
		//3.offset- vị trí của match,
		//4.input- chuỗi nguồn,
		//5.groups- một đối tượng với các nhóm được đặt tên.

// trường hợp đối số là hàm

function replacer(match, p1, p2, p3, offset, string) {
  // p1 is non-digits, p2 digits, and p3 non-alphanumerics
  return [p1, p2, p3].join(' - ');
}
let newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  // abc - 12345 - #$*%



// hàm chuyển độ F sang C

function f2c(x) {

  function convert(str, p1, offset, s) {
    return ((p1 - 32) * 5/9) + 'C';
  }
  
  let s = String(x);
  let test = /(-?\d+(?:\.\d*)?)F\b/g;
  return s.replace(test, convert);
}

console.log(f2c("212F"));

 

regexp.exec(str)

Có thể sử dụng regexp.exec để tìm kiếm từ một vị trí nhất định bằng cách đặt thủ công lastIndex

let str = 'Hello, world!';

let regexp = /\w+/g; // without flag "g", lastIndex property is ignored
regexp.lastIndex = 5; // search from 5th position (from the comma)

alert( regexp.exec(str) ); // world

Nếu có cờ y sẽ search vị trí chính xác

let str = 'Hello, world!';

let regexp = /\w+/y;
regexp.lastIndex = 7; // search exactly at position 5

alert( regexp.exec(str) ); // world