มีอย่างน้อยสี่วิธี ตัวเลือกที่ดีที่สุดซึ่งควรจะเป็นเครื่องมือที่พัฒนาเร็วที่สุดสำหรับ RegEx ดั้งเดิม - วางไว้ที่ด้านบน jsperf.com ไม่สามารถใช้งานได้มิฉะนั้นฉันจะให้สถิติประสิทธิภาพแก่คุณ
อัปเดต : โปรดค้นหาการทดสอบประสิทธิภาพที่นี่และดำเนินการด้วยตนเองเพื่อสนับสนุนผลการปฏิบัติงานของคุณ ข้อมูลเฉพาะของผลลัพธ์จะได้รับในภายหลัง
1
("this is foo bar".match(/o/g)||[]).length
//>2
2
"this is foo bar".split("o").length-1
//>2
ไม่แนะนำให้แยก ทรัพยากรหิว จัดสรรอินสแตนซ์ใหม่ของ 'Array' สำหรับการแข่งขันแต่ละครั้ง อย่าลองใช้ไฟล์> 100MB ผ่าน FileReader คุณสามารถสังเกตการใช้งาน EXACT ได้อย่างง่ายดายโดยใช้ตัวเลือกProfiler ของ Chrome
3
var stringsearch = "o"
,str = "this is foo bar";
for(var count=-1,index=-2; index != -1; count++,index=str.indexOf(stringsearch,index+1) );
//>count:2
4
ค้นหาอักขระเดี่ยว
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
ปรับปรุง:
5
การแมปองค์ประกอบและการกรองไม่แนะนำเนื่องจากการจัดสรรทรัพยากรโดยรวมแทนที่จะใช้ Pythonian 'generators'
var str = "this is foo bar"
str.split('').map( function(e,i){ if(e === 'o') return i;} )
.filter(Boolean)
//>[9, 10]
[9, 10].length
//>2
แชร์:
ฉันทำแก่นสารนี้ด้วย 8 วิธีการนับตัวละครในปัจจุบันดังนั้นเราจึงสามารถรวมกลุ่มและแบ่งปันความคิดของเราได้โดยตรงเพื่อความสนุกและอาจเป็นมาตรฐานที่น่าสนใจ :)
https://gist.github.com/2757250