เสียใจที่เอาชนะม้าตาย แต่เป็นเรื่องแปลกที่ไม่มีใครชี้ให้เห็น - "ใช่คุณทำได้ แต่นี่ตรงกันข้ามกับวิธีที่คุณใช้การจับกลุ่มในชีวิตจริง"
หากคุณใช้ Regex ตามที่ควรจะใช้วิธีแก้ปัญหานั้นง่ายดังนี้:
"6 example input 4".replaceAll("(?:\\d)(.*)(?:\\d)", "number$11");
หรือตามที่ shmosel ชี้ให้เห็นโดยชอบธรรมด้านล่าง
"6 example input 4".replaceAll("\d(.*)\d", "number$11");
... เนื่องจากใน regex ของคุณไม่มีเหตุผลที่ดีในการจัดกลุ่มทศนิยมเลย
โดยปกติคุณจะไม่ใช้กลุ่มการจับภาพในส่วนของสตริงที่คุณต้องการทิ้งคุณใช้กับส่วนของสตริงที่คุณต้องการเก็บไว้ให้
หากคุณต้องการกลุ่มที่คุณต้องการแทนที่จริงๆสิ่งที่คุณอาจต้องการแทนคือเครื่องมือสร้างเทมเพลต (เช่นหนวด, ejs, StringTemplate, ... )
นอกเหนือจากคนที่อยากรู้อยากเห็นแล้วแม้แต่กลุ่มที่ไม่ได้จับภาพใน regexes ก็มีไว้สำหรับกรณีที่เอนจิน regex ต้องการให้พวกเขาจดจำและข้ามข้อความตัวแปร ตัวอย่างเช่นใน
(?:abc)*(capture me)(?:bcd)*
คุณต้องใช้หากข้อมูลของคุณมีลักษณะเหมือน "abcabc capture me bcdbcd" หรือ "abc capture me bcd" หรือแม้แต่ "capture me"
หรือจะวางไว้ในทางกลับกัน: ถ้าข้อความเหมือนกันเสมอและคุณไม่ได้จับมันก็ไม่มีเหตุผลที่จะใช้กลุ่มเลย