Hướng dẫn how do you strip quotes in javascript? - làm thế nào để bạn loại bỏ dấu ngoặc kép trong javascript?

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:

  • ['"] 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 " để chỉ khớp với báo giá kép.
  • +: 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 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
    
    0: 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:

  • ": theo nghĩa đen, phù hợp với bất kỳ nghĩa đen "
  • 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
    
    3: Bắt đầu bắt nhóm. Bất cứ điều gì nằm giữa dấu ngoặc đơn (
    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
    
    4) sẽ được ghi lại và có thể được sử dụng trong giá trị thay thế.
  • 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
    
    5: Lớp ký tự, khớp với tất cả các ký tự, ngoại trừ " 1 lần trở lên
  • 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
    
    7: 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 " nghĩa đen
  • 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
    
    9: Nhóm bắt giữ kết thúc
  • ": Một mục danh sách CF khác

Sự thay thế là

str.replace(/^"(.+(?="$))"$/, '$1');
2, đây là một tham chiếu ngược cho nhóm bị bắt đầu tiên, là
str.replace(/^"(.+(?="$))"$/, '$1');
3 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à
str.replace(/^"(.+(?="$))"$/, '$1');
4 -> Thay thế
str.replace(/^"(.+(?="$))"$/, '$1');
5 bằng ->
str.replace(/^"(.+(?="$))"$/, '$1');
6. Trích dẫn đã biến mất, công việc được thực hiện.
What it does is
str.replace(/^"(.+(?="$))"$/, '$1');
4 -> replaces
str.replace(/^"(.+(?="$))"$/, '$1');
5 with ->
str.replace(/^"(.+(?="$))"$/, '$1');
6. 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

str.replace(/^"(.+(?="$))"$/, '$1');
7, đầu ra sẽ không thay đổi, nhưng thay đổi chuỗi đầu vào thành
str.replace(/^"(.+(?="$))"$/, '$1');
8 và bạn sẽ kết thúc với
str.replace(/^"(.+(?="$))"$/, '$1');
9 làm đầu ra.

Explanation:

  • str.replace(/^["'](.+(?=["']$))["']$/, '$1');
    
    0: khớp với phần đầu của chuỗi
    str.replace(/^["'](.+(?=["']$))["']$/, '$1');
    
    1 và ". Nếu chuỗi không bắt đầu với ", biểu thức đã thất bại ở đây và không có gì được thay thế.
  • str.replace(/^["'](.+(?=["']$))["']$/, '$1');
    
    4: 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
  • str.replace(/^["'](.+(?=["']$))["']$/, '$1');
    
    5: Lookahead tích cực giống như trên, chỉ có điều chỉ định rằng " phải là kết thúc của chuỗi (
    str.replace(/^["'](.+(?=["']$))["']$/, '$1');
    
    7 === End)
  • str.replace(/^["'](.+(?=["']$))["']$/, '$1');
    
    8: 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 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
0 (đố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ỉ á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 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
0 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

str.replace(/^["'](.+(?=["']$))["']$/, '$1');
0 và
str.replace(/^["'](.+(?=["']$))["']$/, '$1');
8 khớp với các trích dẫn phân định ở đầu và cuối chuỗi, và
someStr.replace(/^"(.+)"$/,'$1');
2 khớ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ó " ở 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

someStr.replace(/^"(.+)"$/,'$1');
4 để cắt đứt những con ký đầu tiên và cuối cùng. Chuỗi là không chỉ số, vì vậy char cuối cùng là
someStr.replace(/^"(.+)"$/,'$1');
5.
someStr.replace(/^"(.+)"$/,'$1');
4 mong đợi 2 đối số, trong đó phần đầu tiên 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 lần đầu tiên, độ dài đó là
someStr.replace(/^"(.+)"$/,'$1');
7. 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 noQuotes = someStr.split('"').join('');

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