Hướng dẫn can you modify strings in javascript? - bạn có thể sửa đổi chuỗi trong javascript không?

Hàm String#replace() thay thế các phiên bản của chuỗi con bằng một chuỗi con khác và trả về chuỗi được sửa đổi. Chức năng này có vẻ đơn giản lúc đầu, nhưng String#replace() có thể làm nhiều hơn là chỉ thay thế 'foo' bằng 'thanh'. Trong bài viết này, tôi sẽ giải thích một số cách tinh vi hơn để sử dụng String#replace() và nêu bật một số cạm bẫy phổ biến cần tránh.

Những điều cơ bản của việc thay thế một chuỗi

Các chuỗi JavaScript là bất biến, vì vậy hàm String#replace() trả về chuỗi sửa đổi. Nó không sửa đổi chuỗi hiện có.not modify the existing string.

const str1 = 'foo bar';
const str2 = str1.replace('foo', 'bar');

str1; // 'foo bar'
str2; // 'bar bar'

Nói chung, đối số đầu tiên cho

'foo foo'.replace('foo', 'bar'); // 'bar foo'
3 được gọi là mẫu và đối số thứ 2 được gọi là thay thế. Trong ví dụ trên, 'foo' là mẫu và 'thanh' là sự thay thế.

Theo mặc định,

'foo foo'.replace('foo', 'bar'); // 'bar foo'
3 chỉ thay thế phiên bản đầu tiên của mẫu. Trong ví dụ dưới đây, JavaScript chỉ thay thế phiên bản đầu tiên của 'foo' bằng 'thanh'.

'foo foo'.replace('foo', 'bar'); // 'bar foo'

Thật không may, theo kinh nghiệm của tôi, rất hiếm, bạn chỉ muốn thay thế ví dụ đầu tiên của một nền tảng. Để làm cho JavaScript thay thế tất cả các trường hợp của một chuỗi con thay vì chỉ một, bạn cần sử dụng một biểu thức thông thường.

REGEXPS VÀ Cờ 'foo foo'.replace('foo', 'bar'); // 'bar foo'5

Để thay thế tất cả các phiên bản 'foo' trong một chuỗi, bạn cần sử dụng biểu thức thông thường bằng cờ

'foo foo'.replace('foo', 'bar'); // 'bar foo'
6.

// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'

Sử dụng cú pháp

'foo foo'.replace('foo', 'bar'); // 'bar foo'
7 có thể bất tiện nếu chuỗi bạn muốn thay thế có dấu gạch chéo hoặc ký tự đặc biệt. Trong trường hợp đó, bạn có thể sử dụng hàm tạo
'foo foo'.replace('foo', 'bar'); // 'bar foo'
8 của JavaScript.

// Pass 'g' as the 2nd argument to set the global flag
const re = new RegExp('/home/user', 'g');

'/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'

re.global; // true

Nếu bạn muốn làm vệ sinh đầu vào của người dùng để giúp sử dụng an toàn với RegEXPS và

'foo foo'.replace('foo', 'bar'); // 'bar foo'
9, bạn nên sử dụng gói
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
0.

const escapeString = require('escape-string-regexp');

// Without escaping the string, `new RegExp('.*')` gives you a RegExp
// that matches any string, rather than just instances of '.*'.
const re = new RegExp(escapeString('.*'), 'g');

'.* .*'.replace(re, 'foo'); // foo foo

Mô hình thay thế

Có một số chuỗi ký tự đặc biệt mà bạn có thể sử dụng trong đối số thứ 2 thành

'foo foo'.replace('foo', 'bar'); // 'bar foo'
3. Ví dụ: giả sử bạn muốn bọc tất cả các số trong một chuỗi trong ngoặc đơn. JavaScript thay thế
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
2 trong chuỗi thay thế bằng chuỗi phù hợp, do đó bạn có thể bọc tất cả các số trong ngoặc đơn như hình dưới đây. Lưu ý rằng JavaScript không coi chuỗi thay thế là một biểu thức thông thường, vì vậy bạn không cần phải thoát khỏi dấu ngoặc đơn.not treat the replacement string as a regular expression, so you don't need to escape the parentheses.

const str = 'Like example 1, example 2 also shows this pattern';

// 'Like example (1), example (2) also shows this pattern'
str.replace(/\d+/g, '($&)');

Một nhiệm vụ khó khăn hơn một chút là tiền tố tất cả các số trong một chuỗi có dấu hiệu đô la '$'. Sử dụng

// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
3 vì sự thay thế của bạn sẽ không cho bạn kết quả đúng. Bạn cần sử dụng
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
4 với 3
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5 ký tự.not give you the right result. You need to use
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
4 with 3
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5 characters.

// Year over year revenue grew from $4M to $5M
'Year over year revenue grew from 4M to 5M'.replace(/\d+/g, '$$$&');

Nếu bạn muốn thêm một dấu hiệu

// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5 ngay trước một mẫu thay thế, bạn cần thoát khỏi nó bằng cách sử dụng
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
7. Bạn chỉ cần thoát
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5 nếu bạn đang sử dụng nó ngay lập tức trước
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5,
// Pass 'g' as the 2nd argument to set the global flag
const re = new RegExp('/home/user', 'g');

'/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'

re.global; // true
0,
// Pass 'g' as the 2nd argument to set the global flag
const re = new RegExp('/home/user', 'g');

'/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'

re.global; // true
1,
// Pass 'g' as the 2nd argument to set the global flag
const re = new RegExp('/home/user', 'g');

'/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'

re.global; // true
2. Bạn cũng cần thoát
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5 nếu nó ngay trước một chữ số và bạn đang sử dụng các nhóm bắt giữ. Ví dụ: bạn không cần phải thoát
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5 nếu ký tự tiếp theo trong thay thế là một không gian:not need to escape
// Note the 'g' after `/foo/`
'foo foo'.replace(/foo/g, 'bar'); // 'bar bar'

// Without 'g', `replace()` will only replace the first 'foo'
'foo foo'.replace(/foo/, 'bar'); // 'bar foo'
5 if the next character in the replacement is a space:

// Year over year revenue grew from $ 4M to $ 5M
'Year over year revenue grew from 4M to 5M'.replace(/\d+/g, '$ $&');

Vượt qua một chức năng như là sự thay thế

Bạn có thể nhận được thêm lạ mắt và vượt qua một chức năng là sự thay thế. JavaScript sẽ gọi chức năng thay thế của bạn cho mọi phiên bản của mẫu và thay thế bằng giá trị trả về của chức năng thay thế của bạn.

JavaScript gọi chức năng thay thế của bạn với 3 tham số trừ khi bạn sử dụng nhóm chụp regexp. 3 đối số là:

  • // Pass 'g' as the 2nd argument to set the global flag
    const re = new RegExp('/home/user', 'g');
    
    '/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'
    
    re.global; // true
    5: Chất phụ phù hợp với mẫu
  • // Pass 'g' as the 2nd argument to set the global flag
    const re = new RegExp('/home/user', 'g');
    
    '/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'
    
    re.global; // true
    6: Chỉ số bắt đầu
    // Pass 'g' as the 2nd argument to set the global flag
    const re = new RegExp('/home/user', 'g');
    
    '/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'
    
    re.global; // true
    5 trong toàn bộ chuỗi
  • // Pass 'g' as the 2nd argument to set the global flag
    const re = new RegExp('/home/user', 'g');
    
    '/home/user/path/to/file.txt'.replace(re, '~'); // '~/path/to/file.txt'
    
    re.global; // true
    8: Chuỗi bạn đã gọi
    'foo foo'.replace('foo', 'bar'); // 'bar foo'
    3 trên.

Đây là một ví dụ:

const values = ['foo', 'bar', 'baz'];

// The below replaces '1 2 3' with 'foo bar baz'
'1 2 3'.replace(/\d+/g, function(name, offset, string) {
  // This function is called 3 times
  name; // '1', '2', '3'
  offset; // 0, 2, 4
  string; // Always '1 2 3'

  return values[Number(name) - 1]; // return 'foo', 'bar', 'baz'
});

Tiến lên

Thay thế các chuỗi con trong JavaScript có một số cạm bẫy phổ biến, đáng chú ý nhất là chỉ thay thế cho trường hợp đầu tiên của chuỗi con theo mặc định. Nhưng JavaScript bù đắp cho nó với các mẫu thay thế và các hàm thay thế, cho phép một số mẫu thao tác chuỗi mạnh mẽ. Các nhiệm vụ khó khăn như tiền tố tất cả các số trong một chuỗi có dấu hiệu đô la trở thành một lớp lót thanh lịch. Hãy thử các mẫu thay thế hoặc các chức năng thay thế vào lần tới khi bạn bị cám dỗ để chuỗi cùng nhau

const escapeString = require('escape-string-regexp');

// Without escaping the string, `new RegExp('.*')` gives you a RegExp
// that matches any string, rather than just instances of '.*'.
const re = new RegExp(escapeString('.*'), 'g');

'.* .*'.replace(re, 'foo'); // foo foo
0.

Tìm thấy một lỗi đánh máy hoặc lỗi? Mở ra một yêu cầu kéo! Bài đăng này có sẵn dưới dạng Markdown trên & nbsp; github

Làm thế nào để bạn thao tác văn bản trong javascript?

Thao tác chuỗi với JavaScript..
Concat () - Kết hợp văn bản của hai hoặc nhiều chuỗi và trả về một chuỗi mới ..
indexof () - Trả về chỉ mục bắt đầu của một chuỗi con trong một chuỗi khác.....
charat () - Trả về ký tự tại vị trí được chỉ định ..

Làm thế nào để bạn thay thế một phần nhất định của một chuỗi javascript?

Phương thức thay thế () tìm kiếm một chuỗi cho một giá trị hoặc biểu thức chính quy.Phương thức thay thế () trả về một chuỗi mới với (các) giá trị được thay thế. searches a string for a value or a regular expression. The replace() method returns a new string with the value(s) replaced.

Bạn có thể thay đổi một ký tự trong một chuỗi không?

Chuỗi là bất biến trong Java.Bạn không thể thay đổi chúng.You can't change them.

Thao tác chuỗi trong JavaScript là gì?

Chuỗi được sử dụng để lưu trữ dữ liệu dưới dạng văn bản.Họ có các chỉ số dựa trên không.Trong JavaScript, một chuỗi không phải là một mảng các ký tự mà là một đối tượng;và để thay đổi hoặc thao tác một chuỗi, một số chức năng hoặc phương thức được yêu cầu.JavaScript cung cấp các chức năng và phương pháp khác nhau để thao tác giá trị của một chuỗi.JavaScript provides various functions and methods to manipulate the value of a string.