ลบทุกอย่างหลังจากตัวละครบางตัว


281

มีวิธีลบทุกอย่างหลังจากตัวละครบางตัวหรือเพียงแค่เลือกทุกอย่างขึ้นอยู่กับตัวละครตัวนั้น? ฉันได้รับค่าจาก href และถึง "?" และมันจะเป็นจำนวนอักขระที่แตกต่างกันเสมอ

แบบนี้

/Controller/Action?id=11112&value=4444

ฉันต้องการ href ให้เป็น /Controller/Actionเพียงเท่านั้นดังนั้นฉันต้องการลบทุกอย่างหลังจาก "?"

ฉันกำลังใช้งานอยู่ตอนนี้:

 $('.Delete').click(function (e) {
     e.preventDefault();

     var id = $(this).parents('tr:first').attr('id');                
     var url = $(this).attr('href');

     console.log(url);
 }

คำตอบ:


468
var s = '/Controller/Action?id=11112&value=4444';
s = s.substring(0, s.indexOf('?'));
document.write(s);

ตัวอย่างที่นี่

ฉันควรพูดถึงว่าฟังก์ชั่นสตริงดั้งเดิมนั้นเร็วกว่านิพจน์ทั่วไปซึ่งควรใช้เมื่อจำเป็นจริงๆเท่านั้น (นี่ไม่ใช่หนึ่งในกรณีเหล่านั้น)

อัปเดตรหัสไปยังบัญชีสำหรับไม่ '?':

var s = '/Controller/Action';
var n = s.indexOf('?');
s = s.substring(0, n != -1 ? n : s.length);
document.write(s);

ตัวอย่างที่นี่


15
รหัสสปาเก็ตตี้นี้ไม่ควรเป็นคำตอบที่ดีที่สุด ดูคำตอบวิธีแยก
LastTribunal

1
LoL - อย่างใดที่ไม่เข้าใจ regex และวิธีการแบ่งงานได้รับอำนาจลงคะแนน การทำความเข้าใจกับเมธอด String ก็เพียงพอแล้ว ความเข้าใจน้อยที่สุดว่าสิ่งต่าง ๆ ทำงานอย่างไรและกฎที่ใหญ่ที่สุดในโลก: P ดังนั้นฉันจึงเพิ่มคำอธิบายทีละขั้นตอนในคำตอบแบบแยกส่วน (เพื่อเปลี่ยน wolrd)

1
LoL - การแบ่งสามารถยอมรับ regex ดังนั้น +1 หากไม่ใช้การแบ่ง LoL - Javascript ใช้ regex ดังนั้น +1 สำหรับไม่ใช้ Javascript? รหัสและความซับซ้อนมากขึ้นจะทำให้เป็นงานง่ายได้อย่างไร ไม่ใช่ทั้ง regex และ split ง่ายกว่าและมีประสิทธิภาพมากกว่านี้ใช่ไหม

294

คุณยังสามารถใช้split()ฟังก์ชั่น ดูเหมือนจะเป็นสิ่งที่ง่ายที่สุดที่อยู่ในใจของฉัน :)

url.split('?')[0]

การสาธิต jsFiddle

ข้อดีอย่างหนึ่งคือวิธีนี้จะใช้ได้แม้ว่าจะไม่มี?ในสตริง - มันจะคืนค่าสตริงทั้งหมด


1
[0] ทำอะไรในสถานการณ์นี้
Dejan.S

13
splitส่งกลับอาร์เรย์ (ในกรณีนี้มันมีสององค์ประกอบ0และ1) และ[0]ได้รับองค์ประกอบแรกของอาร์เรย์กลับ
kapa

41
+1 สิ่งที่ดีที่สุดเกี่ยวกับสิ่งนี้คือมันใช้งานได้เสมอแม้ว่าจะไม่มี '?'
Kevin

เราควรทำอย่างไรถ้าเราต้องการแยก '\'
anud33p

1
รักคำตอบนี้ง่ายและทรงพลังจริงๆในสิ่งที่ให้คุณ
Richlewis

19
var href = "/Controller/Action?id=11112&value=4444";
href = href.replace(/\?.*/,'');
href ; //# => /Controller/Action

วิธีนี้จะใช้งานได้หากพบ '?' และถ้ามันไม่ได้


นี่จะเป็นการลบ '?' และคนอื่น ๆ ใน OP ไม่ได้ขอ
Kevin

4
นี้จะลบทุกอย่างหลัง?(รวม)
mcont

2
คำตอบที่ดีที่สุด ! OP ขอให้ลบทุกอย่างหลังจาก?และระบุไว้อย่างชัดเจนเพื่อลบ?ด้วยโดยพูดว่า: ฉันต้องการ href เป็น / Controller / Action เท่านั้น

3

หากคุณต้องการเก็บ "?" และเพียงลบทุกอย่างหลังจากตัวละครนั้นคุณสามารถทำได้:

var str = "/Controller/Action?id=11112&value=4444",
    stripped = str.substring(0, str.indexOf('?') + '?'.length);

// output: /Controller/Action?

วิธีนี้ใช้ไม่ได้หากสตริงไม่มี a?
Stephan Bijzitter

@StephanBijzitter ใช่ฉันรู้ ตั้งแต่คำตอบของฉันบอกว่า: "ถ้าคุณต้องการเก็บไว้? " - แน่นอนว่าจะต้องมีเครื่องหมายคำถามในสตริงที่จะเก็บ ..
Patad

แปลกดูเหมือนความคิดเห็นของฉันมีความหมายสำหรับคำตอบอื่น ๆ โดย @Imran ไม่ทราบว่าทำไมฉันโพสต์ไว้ในคำตอบของคุณ
Stephan Bijzitter

1

อาจจะเป็นปาร์ตี้ที่ช้ามาก: p

คุณสามารถใช้การอ้างอิงกลับ$ '

$' - Inserts the portion of the string that follows the matched substring.

let str = "/Controller/Action?id=11112&value=4444"

let output = str.replace(/\?.+/g,"$'")

console.log(output)


1

มันเหมาะกับฉันอย่างมาก:

var x = '/Controller/Action?id=11112&value=4444';
var remove_after= x.indexOf('?');
var result =  x.substring(0, remove_after);
alert(x);

0

ทำงานให้ฉัน:

      var first = regexLabelOut.replace(/,.*/g, "");

-1

มันสามารถทำได้อย่างง่ายดายโดยใช้ JavaScript สำหรับการอ้างอิงดูการเชื่อมโยง JS String

แก้ไขมันสามารถทำได้ง่ายตาม ;)

var url="/Controller/Action?id=11112&value=4444 ";
var parameter_Start_index=url.indexOf('?');
var action_URL = url.substring(0, parameter_Start_index);
alert('action_URL : '+action_URL);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.