উত্তর:
একটি লাইন যথেষ্ট:
var x = '|f|oo||';
var y = x.replace(/^\|+|\|+$/g, '');
document.write(x + '<br />' + y);
^\|+ beginning of the string, pipe, one or more times
| or
\|+$ pipe, one or more times, end of the string
একটি সাধারণ সমাধান:
function trim (s, c) {
if (c === "]") c = "\\]";
if (c === "\\") c = "\\\\";
return s.replace(new RegExp(
"^[" + c + "]+|[" + c + "]+$", "g"
), "");
}
chars = ".|]\\";
for (c of chars) {
s = c + "foo" + c + c + "oo" + c + c + c;
console.log(s, "->", trim(s, c));
}
যদি আমি ভালভাবে বুঝতে পারি তবে আপনি কোনও নির্দিষ্ট চরিত্রটি কেবল তখনই শুরু করতে চান যদি এটি স্ট্রিংয়ের শুরুতে বা শেষে হয় (যেমন: ||fo||oo||||
হওয়া উচিত foo||oo
)। আপনি নীচে একটি অ্যাডহক ফাংশন তৈরি করতে পারেন:
function trimChar(string, charToRemove) {
while(string.charAt(0)==charToRemove) {
string = string.substring(1);
}
while(string.charAt(string.length-1)==charToRemove) {
string = string.substring(0,string.length-1);
}
return string;
}
আমি নীচের কোড দিয়ে এই ফাংশনটি পরীক্ষা করেছি:
var str = "|f|oo||";
$( "#original" ).html( "Original String: '" + str + "'" );
$( "#trimmed" ).html( "Trimmed: '" + trimChar(str, "|") + "'" );
আপনি নিয়মিত প্রকাশটি ব্যবহার করতে পারেন যেমন:
var x = "|f|oo||";
var y = x.replace(/^[\|]+|[\|]+$/g, "");
alert(y); // f|oo
হালনাগাদ:
আপনি যদি কোনও ফাংশনে সাধারণীকরণ করতে চান তবে আপনি নিম্নলিখিতটি করতে পারেন:
var escapeRegExp = function(strToEscape) {
// Escape special characters for use in a regular expression
return strToEscape.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
};
var trimChar = function(origString, charToTrim) {
charToTrim = escapeRegExp(charToTrim);
var regEx = new RegExp("^[" + charToTrim + "]+|[" + charToTrim + "]+$", "g");
return origString.replace(regEx, "");
};
var x = "|f|oo||";
var y = trimChar(x, "|");
alert(y); // f|oo
এই প্রশ্নটি আপ টু ডেট রাখার জন্য:
ES6 স্প্রেড অপারেটরটি ব্যবহার করে আমি রেজেক্স ফাংশনটি বেছে নিতে চাই এমন একটি পদ্ধতির এটি এখানে।
function trimByChar(string, character) {
const first = [...string].findIndex(char => char !== character);
const last = [...string].reverse().findIndex(char => char !== character);
return string.substring(first, string.length - last);
}
@ ফ্যাবিয়ার মন্তব্যের পরে উন্নত সংস্করণ (কেবল একই অক্ষরযুক্ত স্ট্রিংগুলি পরিচালনা করতে পারে)
function trimByChar(string, character) {
const arr = Array.from(string);
const first = arr.indexOf(character);
const last = arr.reverse().indexOf(character);
return string.substring(first + 1, string.length - last - 1);
}
[].concat(string)
যা কাঙ্ক্ষিত ফলাফল নয়। ব্যবহার Array.from(string)
কাজ করবে।
একটি রেজেক্স-কম সংস্করণ যা চোখে সহজ:
const trim = (str, chars) => str.split(chars).filter(Boolean).join(chars);
ব্যবহারের ক্ষেত্রে যেখানে আমরা নিশ্চিত হয়েছি যে প্রান্তগুলি বন্ধ করে দেওয়া অক্ষরের পুনরাবৃত্তি নেই।
const trim = (str, chars) => str.split(chars).filter(x => { Boolean(x); console.log(typeof(x), x, Boolean(x)); }).join(chars); const str = "#//#//abc#//test#//end#//"; console.log(trim(str, '#//'));
যদি আপনি দীর্ঘতর স্ট্রিংয়ের সাথে কাজ করে থাকেন তবে আমি বিশ্বাস করি যে এটি বরাদ্দ স্ট্রিংয়ের সংখ্যা শূন্য বা একটিতে হ্রাস করে অন্যান্য বিকল্পগুলির সর্বাধিক কার্যকর করা উচিত:
function trim(str, ch) {
var start = 0,
end = str.length;
while(start < end && str[start] === ch)
++start;
while(end > start && str[end - 1] === ch)
--end;
return (start > 0 || end < str.length) ? str.substring(start, end) : str;
}
// Usage:
trim('|hello|world|', '|'); // => 'hello|world'
অথবা আপনি যদি একাধিক অক্ষরের একটি সেট থেকে ছাঁটাতে চান:
function trimAny(str, chars) {
var start = 0,
end = str.length;
while(start < end && chars.indexOf(str[start]) >= 0)
++start;
while(end > start && chars.indexOf(str[end - 1]) >= 0)
--end;
return (start > 0 || end < str.length) ? str.substring(start, end) : str;
}
// Usage:
trimAny('|hello|world ', [ '|', ' ' ]); // => 'hello|world'
// because '.indexOf' is used, you could also pass a string for the 2nd parameter:
trimAny('|hello| world ', '| '); // => 'hello|world'
সম্পাদনা: মজাদার জন্য, শব্দগুলি ছাঁটাই (স্বতন্ত্র অক্ষরের পরিবর্তে)
// Helper function to detect if a string contains another string
// at a specific position.
// Equivalent to using `str.indexOf(substr, pos) === pos` but *should* be more efficient on longer strings as it can exit early (needs benchmarks to back this up).
function hasSubstringAt(str, substr, pos) {
var idx = 0, len = substr.length;
for (var max = str.length; idx < len; ++idx) {
if ((pos + idx) >= max || str[pos + idx] != substr[idx])
break;
}
return idx === len;
}
function trimWord(str, word) {
var start = 0,
end = str.length,
len = word.length;
while (start < end && hasSubstringAt(str, word, start))
start += word.length;
while (end > start && hasSubstringAt(str, word, end - len))
end -= word.length
return (start > 0 || end < str.length) ? str.substring(start, end) : str;
}
// Usage:
trimWord('blahrealmessageblah', 'blah');
এটি একসাথে বেশ কয়েকটি অক্ষর ছাঁটাই করতে পারে:
String.prototype.trimChars = function (c) {
var re = new RegExp("^[" + c + "]+|[" + c + "]+$", "g");
return this.replace(re,"");
}
var x = "|f|oo||";
x = x.trimChars('|'); // f|oo
var y = "..++|f|oo||++..";
y = y.trimChars('|.+'); // f|oo
var z = "\\f|oo\\"; // \f|oo\
// For backslash, remember to double-escape:
z = z.trimChars("\\\\"); // f|oo
আপনি যদি আপনার প্রোগ্রামে এই ফাংশনগুলি সংজ্ঞায়িত করেন তবে আপনার স্ট্রিংগুলিতে একটি আপগ্রেড সংস্করণ থাকবে trim
যা প্রদত্ত সমস্ত অক্ষর ছাঁটাই করতে পারে:
String.prototype.trimLeft = function(charlist) {
if (charlist === undefined)
charlist = "\s";
return this.replace(new RegExp("^[" + charlist + "]+"), "");
};
String.prototype.trim = function(charlist) {
return this.trimLeft(charlist).trimRight(charlist);
};
String.prototype.trimRight = function(charlist) {
if (charlist === undefined)
charlist = "\s";
return this.replace(new RegExp("[" + charlist + "]+$"), "");
};
var withChars = "/-center-/"
var withoutChars = withChars.trim("/-")
document.write(withoutChars)
আমার জ্ঞানের কাছে, jQuery এর যে পদ্ধতি সম্পর্কে আপনি জিজ্ঞাসা করছেন তার কোনও বিল্ট ইন ফাংশন নেই। তবে জাভাস্ক্রিপ্টের সাহায্যে আপনি কেবল আপনার স্ট্রিংয়ের সামগ্রী পরিবর্তন করতে প্রতিস্থাপনটি ব্যবহার করতে পারেন:
x.replace(/|/i, ""));
এটি | এর সমস্ত উপস্থিতি প্রতিস্থাপন করবে কিছুর সাথে না.
$
এই প্রান্তটি কেবল শেষে শেষের দিকে নিক্ষেপ করুন : "||spam|||".replace(/\|+$/g, "")
বা ^
এটি শুরুতে কেবল এর মতো:"||spam|||".replace(/^\|+/g, "")
এটি একটি সমস্ত নেতৃস্থানীয় এবং পেছনের সীমানা ছাঁটাচ্ছে
const trim = (str, delimiter) => {
const pattern = `[^\\${delimiter}]`;
const start = str.search(pattern);
const stop = str.length - str.split('').reverse().join('').search(pattern);
return str.substring(start, stop);
}
const test = '||2|aaaa12bb3ccc|||||';
console.log(trim(test, '|')); // 2|aaaa12bb3ccc
আমি লোডাসের দিকে তাকানোর পরামর্শ দেব এবং তারা কীভাবে এটি প্রয়োগ করে trim
ফাংশনটি ।
ডকুমেন্টেশন এবং উত্সের জন্য লোডাশ ট্রিম দেখুন সঠিক কোডটি দেখতে ।
আমি জানি এটি আপনার প্রশ্নের সঠিক উত্তর সরবরাহ করে না, তবে আমি মনে করি যে এ জাতীয় প্রশ্নে একটি লাইব্রেরির জন্য একটি রেফারেন্স সেট করা ভাল কারণ অন্যরা এটির পক্ষে দরকারী বলে মনে হতে পারে।
এই কাজটি সমাধানের সর্বোত্তম উপায় হ'ল (পিএইচপি trim
ফাংশনের সাথে সমান ):
function trim( str, charlist ) {
if ( typeof charlist == 'undefined' ) {
charlist = '\\s';
}
var pattern = '^[' + charlist + ']*(.*?)[' + charlist + ']*$';
return str.replace( new RegExp( pattern ) , '$1' )
}
document.getElementById( 'run' ).onclick = function() {
document.getElementById( 'result' ).value =
trim( document.getElementById( 'input' ).value,
document.getElementById( 'charlist' ).value);
}
<div>
<label for="input">Text to trim:</label><br>
<input id="input" type="text" placeholder="Text to trim" value="dfstextfsd"><br>
<label for="charlist">Charlist:</label><br>
<input id="charlist" type="text" placeholder="Charlist" value="dfs"><br>
<label for="result">Result:</label><br>
<input id="result" type="text" placeholder="Result" disabled><br>
<button type="button" id="run">Trim it!</button>
</div>
পিএস: কেন আমি আমার উত্তর পোস্ট করেছি, যখন বেশিরভাগ লোক ইতিমধ্যে এটি করে ফেলেছে? কারণ আমি সেখানে উত্তরগুলির মধ্যে "সেরা" ভুলটি পেয়েছি: সকলেই '*' এর পরিবর্তে '+' মেটা ব্যবহার করেছে, কারণ trim
তারা শুরু এবং / অথবা সমাপ্ত হয়, তবে অন্য ক্ষেত্রে এটি মূল স্ট্রিংটি ফিরে আসবে ।
আমি @ Pho3niX83 থেকে সমাধানটি পছন্দ করি ...
আসুন এটি "চর" পরিবর্তে "শব্দ" দিয়ে প্রসারিত করুন ...
function trimWord(_string, _word) {
var splitted = _string.split(_word);
while (splitted.length && splitted[0] === "") {
splitted.shift();
}
while (splitted.length && splitted[splitted.length - 1] === "") {
splitted.pop();
}
return splitted.join(_word);
};
function trim(text, val) {
return text.replace(new RegExp('^'+val+'+|'+val+'+$','g'), '');
}
"|Howdy".replace(new RegExp("^\\|"),"");
(ডাবল পলায়ন নোট করুন। \\
প্রয়োজন, স্ট্রিং মধ্যে আসলে একক স্ল্যাশ আছে , যা পরে RegExp|
এ পালানোর দিকে পরিচালিত করে )।
কেবলমাত্র কয়েকটি অক্ষরেরই রেজিপ্যাক্স-এস্কেপিং প্রয়োজন। তাদের মধ্যে পাইপ অপারেটর।
চেষ্টা করে দেখুন:
console.log(x.replace(/\|/g,''));
String.prototype.TrimStart = function (n) {
if (this.charAt(0) == n)
return this.substr(1);
};
String.prototype.TrimEnd = function (n) {
if (this.slice(-1) == n)
return this.slice(0, -1);
};
এই পদ্ধতিটি ব্যবহার করে দেখুন:
var a = "anan güzel mi?";
if (a.endsWith("?")) a = a.slice(0, -1);
document.body.innerHTML = a;