ลบสตริงที่จุดเริ่มต้นของ URL


108

ฉันต้องการลบส่วน " www." ออกจากจุดเริ่มต้นของสตริง URL

ตัวอย่างเช่นในกรณีทดสอบเหล่านี้:

เช่นwww.test.comtest.com
เช่นwww.testwww.comtestwww.com
เช่นtestwww.comtestwww.com(ถ้าไม่มี)

ฉันจำเป็นต้องใช้ Regexp หรือมีฟังก์ชันอัจฉริยะหรือไม่?


นี่เป็นคำถามที่เก่ามาก แต่ก็คุ้มที่จะชี้ให้เห็นในปี 2019 คุณควรใช้ตัวแยกวิเคราะห์ URL แทน regex
mikemaccana

1
เจ้าของwww.comจะต้องเสียใจอย่างมากกับคำตอบทั้งหมดนี้
BrainCore

คำตอบ:


237

ขึ้นอยู่กับสิ่งที่คุณต้องการคุณมีสองทางเลือกคุณสามารถทำได้:

// this will replace the first occurrence of "www." and return "testwww.com"
"www.testwww.com".replace("www.", "");

// this will slice the first four characters and return "testwww.com"
"www.testwww.com".slice(4);

// this will replace the www. only if it is at the beginning
"www.testwww.com".replace(/^(www\.)/,"");

25
อาจเป็นวิธีสุดท้ายคือทางออกที่ดีที่สุด
Christoph

11
ไม่ใช่ทางออกที่ดีที่สุด การสร้าง regexp เพื่อลบสตริงย่อยเป็นการใช้งานมากเกินไป!
berezovskyi

4
@berezovskiy ขึ้นอยู่กับว่าคุณกำลังทำอะไรอยู่เช่นคุณกำลังสร้างเกมที่ประสิทธิภาพเป็นสิ่งสำคัญที่คุณพูดถูกในกรณีส่วนใหญ่ IMO จะดีกว่ามากที่จะชัดเจนและไม่แนะนำจุดบกพร่องเพื่อความสมบูรณ์แบบน้อยที่สุด ตี. อย่างไรก็ตามคำตอบมี 3 ตัวอย่างที่แตกต่างกันให้เลือก
nicosantangelo

7
ฉันชอบตัวเลือกสุดท้ายเป็นอย่างยิ่ง แม้ว่าการใช้งานslice()จะเร็วกว่าเล็กน้อยแต่ใน 99.9% ของสถานการณ์เป็นการเพิ่มประสิทธิภาพที่ไม่เกี่ยวข้องก่อนกำหนด การเขียนreplace(/^www\./,"") มีความชัดเจนรหัสเอกสารในตัวเอง
Tom Lord

6
โซลูชันที่หนึ่งและสองจะล้มเหลวในกรณีตัวอย่างที่สาม tutut
Yarek T

13

ใช่มี RegExp แต่คุณไม่จำเป็นต้องใช้หรือฟังก์ชั่น "อัจฉริยะ" ใด ๆ :

var url = "www.testwww.com";
var PREFIX = "www.";
if (url.indexOf(PREFIX) == 0) {
  // PREFIX is exactly at the beginning
  url = url.slice(PREFIX.length);
}

11

หากสตริงมีรูปแบบเดียวกันเสมอง่ายsubstr()ก็ควรจะเพียงพอ

var newString = originalStrint.substr(4)

4
testwww.comtwww.com= FAIL
Christoph

1
@Christoph Ya โดยวิธีที่เขาแก้ไขคำถามของเขาหลังจากคำตอบของฉันนั่นคือเหตุผลที่ฉันพูดถึงว่าสตริงมีรูปแบบเดียวกันหรือไม่
talnicolas

14
@Christoph และมันจะเป็น " testwww.comwww.com= FAIL"
talnicolas

7

ด้วยตนเองเช่น

var str = "www.test.com",
    rmv = "www.";

str = str.slice( str.indexOf( rmv ) + rmv.length );

หรือใช้เพียง.replace():

str = str.replace( rmv, '' );

1
ฉันชอบวิธีการแบบแมนนวลเนื่องจากสตริงสามารถมาจากตัวแปรโดยไม่มีความเสี่ยงที่จะทำให้นิพจน์ผิดพลาด
nha

5

คุณสามารถโอเวอร์โหลด String ต้นแบบด้วยฟังก์ชัน removePrefix:

String.prototype.removePrefix = function (prefix) {
    const hasPrefix = this.indexOf(prefix) === 0;
    return hasPrefix ? this.substr(prefix.length) : this.toString();
};

การใช้งาน:

const domain = "www.test.com".removePrefix("www."); // test.com

ฉันเชื่อว่าเป็นการปรับเปลี่ยนต้นแบบของ String
dman

ใช่เช่นการบรรทุกเกินพิกัดต้นแบบใด ๆ มีความเสี่ยงที่จะมีการปะทะกันชื่อด้วยวิธีอื่น (ที่นี่removePrefixในStringชั้นเรียน) .removePrefixตรงกันข้ามมันค่อนข้างสะดวกในการโทรเพียง มันขึ้นอยู่กับคุณ.
Flavien Volken



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.