JavaScript / regex: ลบข้อความระหว่างวงเล็บ


คำตอบ:


217
"Hello, this is Mike (example)".replace(/ *\([^)]*\) */g, "");

ผลลัพธ์:

"Hello, this is Mike"

14
โปรดทราบว่า. replace () ไม่ได้เปลี่ยนสตริงเอง แต่จะส่งคืนสตริงใหม่เท่านั้น ดังนั้นคุณยังคงต้องตั้งค่าตัวแปรให้เท่ากับสิ่งที่คุณเปลี่ยนแปลง
ยับ

2
ในกรณีที่วงเล็บอยู่ตรงกลางสตริง regex ด้านบนจะลบช่องว่างรอบ ๆ ทั้งหมดออก แบบนี้คงไม่ดีแน่
Nigel Johnson

1
จะผกผันได้อย่างไร? ฉันต้องการ(example)เท่านั้น
สั่งซื้อ

ไม่ได้ผลถ้าคุณมีบางอย่างเช่นมันค่อนข้างยุ่ง (ขึ้น (ขวา)) แต่มันเกิดขึ้น :)
TigrouMeow


8

ลอง / \([\s\S]*?\)/g

ที่ไหน

(ช่องว่าง) ตรงกับอักขระ (ช่องว่าง) ตามตัวอักษร

\(ตรงกับอักขระอย่าง(แท้จริง

[\s\S]จับคู่อักขระใด ๆ ( \sจับคู่อักขระช่องว่างใด ๆ และ\Sตรงกับอักขระที่ไม่ใช่ช่องว่างใด ๆ )

*? การแข่งขันระหว่างศูนย์และไม่ จำกัด ครั้ง

\)ตรงกับอักขระอย่าง)แท้จริง

g ตรงกับทั่วโลก

ตัวอย่างรหัส:

var str = "Hello, this is Mike (example)";
str = str.replace(/ \([\s\S]*?\)/g, '');
console.log(str);
.as-console-wrapper {top: 0}


1

ฉันพบว่าเวอร์ชันนี้เหมาะสมที่สุดสำหรับทุกกรณี ไม่ได้ลบช่องว่างทั้งหมด

ตัวอย่างเช่น "a (test) b" -> "a b"

"Hello, this is Mike (example)".replace(/ *\([^)]*\) */g, " ").trim(); "Hello, this is (example) Mike ".replace(/ *\([^)]*\) */g, " ").trim();


Beware trimไม่ได้รับการสนับสนุนในระดับสากล: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…อย่างน้อยมันก็ไม่ใช่ในปี 2015 ... ในปี 2017 มันดูดีขึ้นมาก
Christophe Roussy

ล้มเหลวด้วย "this (example (here) which) is not good" กล่าวคือ. parens ซ้อน!
Marc

1

หากคุณต้องการลบข้อความในวงเล็บที่ซ้อนกันให้ทำดังนี้

        var prevStr;
        do {
            prevStr = str;
            str = str.replace(/\([^\)\(]*\)/, "");
        } while (prevStr != str);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.