Hướng dẫn replace quotation marks javascript - thay thế dấu ngoặc kép javascript

Đối với một ứng dụng web tôi đang tạo, tôi sẽ nhận được các chuỗi văn bản đến, đôi khi có chứa dấu ngoặc kép. Bởi vì sau đó tôi sẽ là tài liệu. Viết chuỗi, chúng cần được thay đổi thành dấu nháy đơn hoặc thoát ra. Làm thế nào tôi sẽ làm điều đó, bởi vì khi tôi thử nó dường như không hoạt động, cụ thể tôi nghĩ bởi vì dấu ngoặc kép của chuỗi dừng phần còn lại của tập lệnh hoạt động.

Hy vọng điều đó có ý nghĩa, tôi khá mới với điều này vì vậy đó là lý do tại sao nó có thể không có ý nghĩa. Tôi sẽ cố gắng và làm rõ nếu cần. Cảm ơn bạn!

hỏi ngày 28 tháng 2 năm 2010 lúc 15:49Feb 28, 2010 at 15:49

Hướng dẫn replace quotation marks javascript - thay thế dấu ngoặc kép javascript

James Wanchaijames WanchaiJames Wanchai

2.7814 Huy hiệu vàng20 Huy hiệu bạc16 Huy hiệu đồng4 gold badges20 silver badges16 bronze badges

2

Thoát chúng cho HTML:

var escapedString = string.replace(/'/g, "'").replace(/"/g, """);

Thoát chúng cho mã JS:

var escapedString = string.replace(/(['"])/g, "\\$1");

Đã trả lời ngày 28 tháng 2 năm 2010 lúc 16:48Feb 28, 2010 at 16:48

Nếu bạn đang tạo các chuỗi JavaScript trên máy chủ, bạn sẽ cần thoát khỏi trích dẫn và một số ký tự khác.

\'      Single quotation mark  
\"      Double quotation mark  
\\      Backslash  
\b      Backspace  
\f      Form feed  
\n      New line  
\r      Carriage return  
\t      Horizontal tab  
\ddd    Octal sequence (3 digits: ddd)  
\xdd    Hexadecimal sequence (2 digits: dd)  
\udddd  Unicode sequence (4 hex digits: dddd)   

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

Hướng dẫn replace quotation marks javascript - thay thế dấu ngoặc kép javascript

Lachlan Rochelachlan RocheLachlan Roche

25,5K5 Huy hiệu vàng80 Huy hiệu bạc77 Huy hiệu đồng5 gold badges80 silver badges77 bronze badges

1

Hãy thử mã sau trong một số HTML:

chuỗi.replace (/& quot;/g, '');

Nếu đó chỉ là JS bạn có thể sử dụng:

chuỗi.replace (/"/g, '');

Điều này loại bỏ các trích dẫn không mong muốn trên các giá trị được gửi từ người dùng.

Đã trả lời ngày 2 tháng 7 năm 2021 lúc 22:26Jul 2, 2021 at 22:26

Bạn cần phải thoát khỏi chúng như vậy:

var foo = '\'foo\'';

Vì vậy, nếu chuỗi nguồn có trích dẫn đơn, hãy thay thế từng trích dẫn bằng một dấu gạch chéo và một trích dẫn duy nhất.

Đã trả lời ngày 28 tháng 2 năm 2010 lúc 15:57Feb 28, 2010 at 15:57

ThomasthomasThomas

63.1K11 Huy hiệu vàng94 Huy hiệu bạc140 Huy hiệu đồng11 gold badges94 silver badges140 bronze badges

Assuming:

var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));

Điều đó nên thực hiện thủ thuật ... (nếu mục tiêu của bạn là thay thế tất cả các trích dẫn kép).

Đây là cách nó hoạt động:

  • var escapedString = string.replace(/(['"])/g, "\\$1");
    
    1 là một lớp ký tự, phù hợp với cả trích dẫn đơn và đôi. Bạn có thể thay thế điều này bằng
    var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2 để chỉ khớp với báo giá kép.
  • var escapedString = string.replace(/(['"])/g, "\\$1");
    
    3: Một hoặc nhiều trích dẫn, ký tự, theo định nghĩa của Char-Class trước (tùy chọn)
  • var escapedString = string.replace(/(['"])/g, "\\$1");
    
    4: Cờ toàn cầu. Điều này bảo JS áp dụng Regex cho toàn bộ chuỗi. Nếu bạn bỏ qua điều này, bạn sẽ chỉ thay thế một char.

Nếu bạn đang cố gắng xóa các trích dẫn xung quanh một chuỗi đã cho (tức là theo cặp), mọi thứ sẽ khó khăn hơn một chút. Bạn sẽ phải sử dụng các xác nhận tìm kiếm:

var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove foo delimiting quotes
str = 'remove only "foo" delimiting "';//note trailing " at the end
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove only foo delimiting "<-- trailing double quote is not removed

Regex giải thích:

  • var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2: theo nghĩa đen, phù hợp với bất kỳ nghĩa đen
    var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2
  • var escapedString = string.replace(/(['"])/g, "\\$1");
    
    7: Bắt đầu bắt nhóm. Bất cứ điều gì giữa các dấu ngoặc đơn (
    var escapedString = string.replace(/(['"])/g, "\\$1");
    
    8) sẽ được ghi lại và có thể được sử dụng trong giá trị thay thế.
  • var escapedString = string.replace(/(['"])/g, "\\$1");
    
    9: Lớp ký tự, khớp với tất cả các ký tự, ngoại trừ
    var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2 1 lần trở lên
  • \'      Single quotation mark  
    \"      Double quotation mark  
    \\      Backslash  
    \b      Backspace  
    \f      Form feed  
    \n      New line  
    \r      Carriage return  
    \t      Horizontal tab  
    \ddd    Octal sequence (3 digits: ddd)  
    \xdd    Hexadecimal sequence (2 digits: dd)  
    \udddd  Unicode sequence (4 hex digits: dddd)   
    
    1: Không có chiều rộng không (như không bị bắt) khẳng định lookahead tích cực. Trận đấu trước sẽ chỉ hợp lệ nếu được theo sau bởi
    var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2 theo nghĩa đen
  • \'      Single quotation mark  
    \"      Double quotation mark  
    \\      Backslash  
    \b      Backspace  
    \f      Form feed  
    \n      New line  
    \r      Carriage return  
    \t      Horizontal tab  
    \ddd    Octal sequence (3 digits: ddd)  
    \xdd    Hexadecimal sequence (2 digits: dd)  
    \udddd  Unicode sequence (4 hex digits: dddd)   
    
    3: Nhóm bắt giữ kết thúc
  • var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2: Một mục Danh sách CF khác

Sự thay thế là

\'      Single quotation mark  
\"      Double quotation mark  
\\      Backslash  
\b      Backspace  
\f      Form feed  
\n      New line  
\r      Carriage return  
\t      Horizontal tab  
\ddd    Octal sequence (3 digits: ddd)  
\xdd    Hexadecimal sequence (2 digits: dd)  
\udddd  Unicode sequence (4 hex digits: dddd)   
6, đây là một tham chiếu ngược cho nhóm bị bắt đầu tiên, là
\'      Single quotation mark  
\"      Double quotation mark  
\\      Backslash  
\b      Backspace  
\f      Form feed  
\n      New line  
\r      Carriage return  
\t      Horizontal tab  
\ddd    Octal sequence (3 digits: ddd)  
\xdd    Hexadecimal sequence (2 digits: dd)  
\udddd  Unicode sequence (4 hex digits: dddd)   
7 hoặc mọi thứ ở giữa các trích dẫn kép. Mẫu phù hợp với cả trích dẫn và những gì nằm giữa chúng, nhưng chỉ thay thế nó bằng những gì ở giữa các trích dẫn, do đó loại bỏ chúng một cách hiệu quả. Những gì nó làm là
\'      Single quotation mark  
\"      Double quotation mark  
\\      Backslash  
\b      Backspace  
\f      Form feed  
\n      New line  
\r      Carriage return  
\t      Horizontal tab  
\ddd    Octal sequence (3 digits: ddd)  
\xdd    Hexadecimal sequence (2 digits: dd)  
\udddd  Unicode sequence (4 hex digits: dddd)   
8 -> Thay thế
\'      Single quotation mark  
\"      Double quotation mark  
\\      Backslash  
\b      Backspace  
\f      Form feed  
\n      New line  
\r      Carriage return  
\t      Horizontal tab  
\ddd    Octal sequence (3 digits: ddd)  
\xdd    Hexadecimal sequence (2 digits: dd)  
\udddd  Unicode sequence (4 hex digits: dddd)   
9 bằng ->
var foo = '\'foo\'';
0. Trích dẫn đã biến mất, công việc được thực hiện.
What it does is
\'      Single quotation mark  
\"      Double quotation mark  
\\      Backslash  
\b      Backspace  
\f      Form feed  
\n      New line  
\r      Carriage return  
\t      Horizontal tab  
\ddd    Octal sequence (3 digits: ddd)  
\xdd    Hexadecimal sequence (2 digits: dd)  
\udddd  Unicode sequence (4 hex digits: dddd)   
8 -> replaces
\'      Single quotation mark  
\"      Double quotation mark  
\\      Backslash  
\b      Backspace  
\f      Form feed  
\n      New line  
\r      Carriage return  
\t      Horizontal tab  
\ddd    Octal sequence (3 digits: ddd)  
\xdd    Hexadecimal sequence (2 digits: dd)  
\udddd  Unicode sequence (4 hex digits: dddd)   
9 with ->
var foo = '\'foo\'';
0. Quotes gone, job done.

Nếu các trích dẫn luôn luôn ở đầu và cuối chuỗi, thì bạn có thể sử dụng điều này:

str.replace(/^"(.+(?="$))"$/, '$1');

Hoặc điều này cho các trích dẫn kép và đơn:

str.replace(/^["'](.+(?=["']$))["']$/, '$1');

Với đầu vào

var foo = '\'foo\'';
1, đầu ra sẽ không thay đổi, nhưng thay đổi chuỗi đầu vào thành
var foo = '\'foo\'';
2 và bạn sẽ kết thúc với
var foo = '\'foo\'';
3 làm đầu ra.

Explanation:

  • var foo = '\'foo\'';
    
    4: khớp với phần đầu của chuỗi
    var foo = '\'foo\'';
    
    5 và
    var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2. Nếu chuỗi không bắt đầu với
    var escapedString = string.replace(/(['"])/g, "\\$1");
    
    2, biểu thức đã thất bại ở đây và không có gì được thay thế.
  • var foo = '\'foo\'';
    
    8: Các trận đấu (và chụp) mọi thứ, bao gồm cả trích dẫn kép một hoặc nhiều lần, với điều kiện là cái nhìn tích cực là đúng
  • A
  • var someStr = 'He said "Hello, my name is Foo"';
    console.log(someStr.replace(/['"]+/g, ''));
    
    2: phù hợp với báo giá kết thúc đó, nhưng không nắm bắt được nó

Việc thay thế được thực hiện theo cách tương tự như trước đây: chúng tôi thay thế trận đấu (bao gồm các trích dẫn mở và đóng), với mọi thứ bên trong chúng. Bạn có thể nhận thấy tôi đã bỏ qua cờ

var escapedString = string.replace(/(['"])/g, "\\$1");
4 (đối với BTW toàn cầu), vì vì chúng tôi đang xử lý toàn bộ chuỗi, biểu thức này chỉ được áp dụng một lần. Một regex dễ dàng hơn, khá nhiều, điều tương tự (có sự khác biệt bên trong về cách tổng hợp/áp dụng Regex) sẽ được:
You may have noticed I've omitted the
var escapedString = string.replace(/(['"])/g, "\\$1");
4 flag (for global BTW), because since we're processing the entire string, this expression only applies once.
An easier regex that does, pretty much, the same thing (there are internal difference of how the regex is compiled/applied) would be:

someStr.replace(/^"(.+)"$/,'$1');

Như trước đây

var foo = '\'foo\'';
4 và
var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));
2 khớp với các trích dẫn phân định ở đầu và cuối chuỗi, và
var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));
6 phù hợp với mọi thứ ở giữa và nắm bắt nó. Tôi đã thử Regex này, dọc theo bên trên (với sự khẳng định nhìn) và, phải thừa nhận, khi tôi ngạc nhiên khi thấy cái này hơi chậm hơn một chút. Tôi đoán là khẳng định tìm kiếm khiến biểu thức trước đó bị hỏng ngay khi động cơ xác định không có
var escapedString = string.replace(/(['"])/g, "\\$1");
2 ở cuối chuỗi. À, nhưng nếu đây là điều bạn muốn/cần, xin vui lòng đọc tiếp:

Tuy nhiên, trong trường hợp cuối cùng này, nó an toàn hơn nhiều, nhanh hơn, dễ bảo trì hơn và tốt hơn để làm điều này:

if (str.charAt(0) === '"' && str.charAt(str.length -1) === '"')
{
    console.log(str.substr(1,str.length -2));
}

Ở đây, tôi đang kiểm tra xem char đầu tiên và cuối cùng trong chuỗi là dấu ngoặc kép. Nếu có, tôi đang sử dụng

var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));
8 để cắt đứt những con ký đầu tiên và cuối cùng. Các chuỗi không được chỉ số, vì vậy char cuối cùng là
var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));
9.
var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));
8 mong đợi 2 đối số, trong đó phần thứ nhất là phần bù mà từ đó phần phụ bắt đầu, thứ hai là độ dài của nó. Vì chúng tôi không muốn char cuối cùng, hơn chúng tôi muốn, độ dài đó là
var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove foo delimiting quotes
str = 'remove only "foo" delimiting "';//note trailing " at the end
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove only foo delimiting "<-- trailing double quote is not removed
1. Dễ dàng.

Tips:

Nhiều hơn về các xác nhận có thể được tìm thấy ở đây Regex rất hữu ích (và IMO vui nhộn), có thể là một chút ngơ ngác lúc đầu. Dưới đây là một số chi tiết và liên kết đến các tài nguyên về vấn đề này. Nếu bạn không thoải mái khi sử dụng Regex, bạn có thể muốn xem xét bằng cách sử dụng:
Regex's are very useful (and IMO fun), can be a bit baffeling at first. Here's some more details, and links to resources on the matter.
If you're not very comfortable using regex's just yet, you might want to consider using:

var escapedString = string.replace(/(['"])/g, "\\$1");
0

Nếu có nhiều trích dẫn trong chuỗi, điều này thậm chí có thể nhanh hơn sử dụng regex