รับสายเหมือน:
"สุนัขมีหางยาวและเป็นสีแดง!"
jQuery หรือ JavaScript ชนิดใดที่สามารถใช้ในการรักษาช่องว่างให้มีพื้นที่สูงสุดได้เพียงหนึ่งช่องเท่านั้น
เป้าหมาย:
"สุนัขมีหางยาวและเป็นสีแดง!"
str.replace(/ +(?= )/g,'');
คุณไม่ได้แทนที่สิ่งใด ๆ
รับสายเหมือน:
"สุนัขมีหางยาวและเป็นสีแดง!"
jQuery หรือ JavaScript ชนิดใดที่สามารถใช้ในการรักษาช่องว่างให้มีพื้นที่สูงสุดได้เพียงหนึ่งช่องเท่านั้น
เป้าหมาย:
"สุนัขมีหางยาวและเป็นสีแดง!"
str.replace(/ +(?= )/g,'');
คุณไม่ได้แทนที่สิ่งใด ๆ
คำตอบ:
ระบุว่าคุณยังต้องการครอบคลุมแท็บบรรทัดใหม่ ฯลฯ เพียงแทนที่\s\s+
ด้วย' '
:
string = string.replace(/\s\s+/g, ' ');
หากคุณต้องการครอบคลุมเฉพาะช่องว่าง (และไม่ใช่แท็บบรรทัดใหม่ ฯลฯ ) ให้ทำดังนี้:
string = string.replace(/ +/g, ' ');
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
มีฟังก์ชั่นในตัวสำหรับการที่: มันเร็วกว่า regex คุณเพียงแค่จะทำหรือstring.trim().replace(/\s\s+/g, ' ');
string.replace(/\s\s+/g, ' ').trim();
/\s\s+/g
และ/\s{2,}/g
ไม่จับคู่อักขระช่องว่างเว้นเสียแต่ว่ามีอย่างน้อยสองตัวติดกันเช่นจะจับคู่ \ t \ t แต่จะไม่ตรงกับ \ t เดี่ยว string.replace(/\s+/g, ' ')
จะจับคู่กับสตริงย่อยอักขระ whitespacey ทั้งหมดและหลายตัวและแทนที่ด้วยช่องว่างเดียว
เมื่อคุณดูเหมือนจะสนใจในการแสดงฉันก็ทำมันด้วย firebug นี่คือผลลัพธ์ที่ฉันได้รับ:
str.replace( / +/g, ' ' ) -> 380ms
str.replace( /\s\s+/g, ' ' ) -> 390ms
str.replace( / {2,}/g, ' ' ) -> 470ms
str.replace( / +/g, ' ' ) -> 790ms
str.replace( / +(?= )/g, ' ') -> 3250ms
นี่คือ Firefox ใช้การแทนที่สตริง 100k
ฉันขอแนะนำให้คุณทำแบบทดสอบการทำโปรไฟล์ด้วย firebug หากคุณคิดว่าประสิทธิภาพเป็นปัญหา มนุษย์เลวร้ายในการทำนายว่าคอขวดในโปรแกรมของพวกเขาอยู่ตรงไหน
(นอกจากนี้โปรดทราบว่าแถบเครื่องมือสำหรับนักพัฒนาของ IE 8 ยังมีตัวสร้างโปรไฟล์ด้วย - มันอาจคุ้มค่าที่จะตรวจสอบว่าประสิทธิภาพการทำงานเป็นอย่างไรใน IE)
( / +(?= )/g, ' ');
ล้มเหลวใน IE9 มันออกจากช่องว่างสอง: "Foo Bar Baz".replace(/ +(?= )/g, ' ');
->"Foo Bar Baz"
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
แก้ไข: หากคุณต้องการแทนที่อักขระช่องว่างทุกชนิดวิธีที่มีประสิทธิภาพที่สุดจะเป็นเช่นนั้น:
str = str.replace(/\s{2,}/g,' ');
นี่เป็นทางออกเดียวแม้ว่าจะกำหนดเป้าหมายไปที่อักขระช่องว่างทั้งหมด :
"The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ')
"The dog has a long tail, and it is RED!"
แก้ไข : สิ่งนี้น่าจะดีกว่าเนื่องจากเป็นพื้นที่เป้าหมายตามด้วยพื้นที่ 1 หรือมากกว่า:
"The dog has a long tail, and it is RED!".replace(/ +/g, ' ')
"The dog has a long tail, and it is RED!"
ทางเลือกวิธีการ:
"The dog has a long tail, and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"
ฉันไม่ได้ใช้/\s+/
ด้วยตัวเองตั้งแต่นั้นมาแทนที่ช่องว่างที่มีความยาว 1 ตัวอักษรหลายครั้งและอาจมีประสิทธิภาพน้อยลงเนื่องจากมีเป้าหมายมากกว่าที่จำเป็น
ฉันไม่ได้ทดสอบสิ่งเหล่านี้อย่างจริงจังดังนั้นถ้าฉันมีข้อบกพร่อง
นอกจากนี้หากคุณกำลังจะทำการเปลี่ยนสตริงอย่าลืมกำหนดตัวแปร / คุณสมบัติให้กับการแทนที่ของตัวเองอีกครั้งเช่น:
var string = 'foo'
string = string.replace('foo', '')
ใช้ jQuery.prototype.text:
var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )
ฉันมีวิธีนี้ฉันเรียกว่าวิธี Derp สำหรับการขาดชื่อที่ดีขึ้น
while (str.indexOf(" ") !== -1) {
str = str.replace(/ /g, " ");
}
วิธีการที่แข็งแกร่งมากขึ้น: นี่ดูแลยังเอาพื้นที่เริ่มต้นและต่อท้ายถ้าพวกเขามีอยู่ เช่น:
// NOTE the possible initial and trailing spaces
var str = " The dog has a long tail, and it is RED! "
str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");
// str -> "The dog has a long tail, and it is RED !"
ตัวอย่างของคุณไม่มีช่องว่างเหล่านั้น แต่พวกเขาก็เป็นสถานการณ์ทั่วไปเช่นกันและคำตอบที่ได้รับการยอมรับนั้นจะตัดส่วนเหล่านั้นออกเป็นช่องว่างเดียวเช่น: "The ... RED!" ซึ่งไม่ใช่สิ่งที่คุณต้องการโดยทั่วไป
แข็งแกร่งยิ่งขึ้น:
ฟังก์ชั่นการตัดแต่ง (คำ) { word = word.replace (/ [^ \ x21- \ x7E] + / g, ''); // เปลี่ยนตัวอักษรที่ไม่ใช่การพิมพ์เป็นช่องว่าง return word.replace (/ ^ \ s + | \ s + $ / g, ''); // ลบช่องว่างนำหน้า / ต่อท้าย }
ฉันแนะนำ
string = string.replace(/ +/g," ");
เพียงช่องว่าง
หรือ
string = string.replace(/(\s)+/g,"$1");
สำหรับการเปลี่ยนผลตอบแทนหลายรายการให้เป็นผลตอบแทนเดียว
ฉันรู้ว่าฉันมางานปาร์ตี้สาย แต่ฉันค้นพบวิธีแก้ปัญหาที่ดี
นี่มันคือ:
var myStr = myStr.replace(/[ ][ ]*/g, ' ');
นี่คือทางเลือกอื่นหากคุณไม่ต้องการใช้แทนที่ (แทนที่ช่องว่างในสตริงโดยไม่ต้องใช้แทนที่จาวาสคริปต์)
var str="The dog has a long tail, and it is RED!";
var rule=/\s{1,}/g;
str = str.split(rule).join(" ");
document.write(str);
คำตอบที่ไม่ได้เข้ารหัสที่ครอบคลุมสำหรับมือใหม่และคณะ
นี่สำหรับหุ่นทั้งหมดเช่นฉันที่ทดสอบสคริปต์ที่เขียนโดยพวกคุณบางคนที่ไม่ได้ทำงาน
ตัวอย่าง 3 ตัวอย่างต่อไปนี้เป็นขั้นตอนที่ฉันใช้เพื่อลบอักขระพิเศษและช่องว่างเพิ่มเติมในเว็บไซต์ 3 เว็บไซต์ต่อไปนี้ (ซึ่งทั้งหมดทำงานได้อย่างสมบูรณ์) {1 EtaVisa.com 2. EtaStatus.com 3. Tikun.com} ดังนั้นฉันจึงรู้ว่าสิ่งเหล่านี้ทำงานได้อย่างสมบูรณ์แบบ
เราได้ล่ามโซ่สิ่งเหล่านี้พร้อมกันมากกว่า 50 ครั้งและไม่มีปัญหา
// นี่เป็นการลบอักขระพิเศษ + 0-9 และอนุญาตให้ใช้เฉพาะตัวอักษร (ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก)
function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}
// นี่เป็นการลบอักขระพิเศษและอนุญาตให้ใช้ตัวอักษร (ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) และช่องว่าง 0-9 และ
function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}
// นี่เป็นการลบอักขระพิเศษและอนุญาตให้มีเพียงตัวอักษร (ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) และ 0-9 และช่องว่าง //. แทนที่ (/ \ s \ s + / g, "") ในตอนท้ายจะลบช่องว่างมากเกินไป // เมื่อฉัน ใช้เครื่องหมายคำพูดเดี่ยวมันไม่ทำงาน
function NoDoublesPls3()
{ var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}
:: NEXT ::
บันทึก # 3 เป็นa .js
// ฉันเรียกฉันว่า NoDoubles.js
:: NEXT :: รวม JS ของคุณไว้ในหน้าของคุณ
<script language="JavaScript" src="js/NoDoubles.js"></script>
รวมสิ่งนี้ลงในช่องแบบฟอร์ม :: เช่น
<INPUT type="text" name="Name"
onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
เพื่อให้ดูเหมือนว่านี้
<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
สิ่งนี้จะลบอักขระพิเศษอนุญาตสำหรับเว้นวรรคเดียวและลบช่องว่างเพิ่มเติม
ยังเป็นไปได้:
str.replace( /\s+/g, ' ' )
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
หรือถ้าคุณต้องการแทนที่แท็บด้วย:
var replaced = string.replace(/\s+/g, " ");
Jquery มีฟังก์ชัน trim () ซึ่งโดยทั่วไปจะเปลี่ยนบางสิ่งเช่น "FOo Bar" เป็น "FOo Bar"
var string = " My String with Multiple lines ";
string.trim(); // output "My String with Multiple lines"
มันมีประโยชน์มากกว่าเพราะมันลบช่องว่างที่จุดเริ่มต้นและจุดสิ้นสุดของสตริงโดยอัตโนมัติ ไม่จำเป็นต้องใช้ regex
is replace ไม่ได้ถูกใช้งาน string = string.split (/ \ W + /);
var myregexp = new RegExp(/ {2,}/g);
str = str.replace(myregexp,' ');
เราสามารถใช้ regex ต่อไปนี้อธิบายด้วยความช่วยเหลือของคำสั่งระบบ sed regex ที่คล้ายกันสามารถใช้ในภาษาและแพลตฟอร์มอื่น ๆ
เพิ่มข้อความลงในไฟล์ทดสอบการพูด
manjeet-laptop:Desktop manjeet$ cat test
"The dog has a long tail, and it is RED!"
เราสามารถใช้ regex ต่อไปนี้เพื่อแทนที่ white space ทั้งหมดด้วย single space
manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"
หวังว่านี่จะทำหน้าที่ได้ตามวัตถุประสงค์
ลองใช้วิธีนี้เพื่อแทนที่ช่องว่างหลายช่องด้วยช่องว่างเดียว
<script type="text/javascript">
var myStr = "The dog has a long tail, and it is RED!";
alert(myStr); // Output 'The dog has a long tail, and it is RED!'
var newStr = myStr.replace(/ +/g, ' ');
alert(newStr); // Output 'The dog has a long tail, and it is RED!'
</script>
อ่านเพิ่มเติม @ การแทนที่หลายช่องว่างด้วย Single Space
var text = `xxx df dfvdfv df
dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');
ผลลัพธ์:
"xxx df dfvdfv df dfv"
สำหรับการควบคุมที่มากขึ้นคุณสามารถใช้การแทนที่โทรกลับเพื่อจัดการค่า
value = "tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
สคริปต์นี้จะลบช่องว่างสีขาว (ช่องว่างหลายแท็บกลับ ฯลฯ ) ระหว่างคำและภายนอก:
// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
var _trimLeft = /^\s+/,
_trimRight = /\s+$/,
_multiple = /\s+/g;
return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};
'mouse pointer touch' .replace (/ ^ \ s + | \ s + $ | (\ s) + / g, "$ 1") ควรทำตามขั้นตอน!
ฉันรู้ว่าเราต้องใช้ regex แต่ในระหว่างการสัมภาษณ์ฉันถูกขอให้ทำโดยไม่ต้องใช้ regex
@ lightlytyler ช่วยฉันด้วยวิธีการด้านล่าง
const testStr = "I LOVE STACKOVERFLOW LOL";
const removeSpaces = str => {
const chars = str.split('');
const nextChars = chars.reduce(
(acc, c) => {
if (c === ' ') {
const lastChar = acc[acc.length - 1];
if (lastChar === ' ') {
return acc;
}
}
return [...acc, c];
},
[],
);
const nextStr = nextChars.join('');
return nextStr
};
console.log(removeSpaces(testStr));