كيف يمكنني تقسيم سلسلة وكسر حرف معين؟
-
01-07-2019 - |
سؤال
لدي هذه السلسلة
'john smith~123 Street~Apt 4~New York~NY~12345'
باستخدام جافا سكريبت، ما هي أسرع طريقة لتحليل ذلك
var name = "john smith";
var street= "123 Street";
//etc...
المحلول
مع جافا سكريبت String.prototype.split
وظيفة:
var input = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = input.split('~');
var name = fields[0];
var street = fields[1];
// etc.
نصائح أخرى
لا تحتاج إلى مسج.
var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];
وفقًا لـ ECMAScript6 ES6
, ، الطريقة النظيفة هي تدمير المصفوفات:
const input = 'john smith~123 Street~Apt 4~New York~NY~12345';
const [name, street, unit, city, state, zip] = input.split('~');
console.log(name); // john smith
console.log(street); // 123 Street
console.log(unit); // Apt 4
console.log(city); // New York
console.log(state); // NY
console.log(zip); // 12345
قد يكون لديك عناصر إضافية في سلسلة الإدخال.في هذه الحالة، يمكنك استخدام عامل الراحة للحصول على مصفوفة للباقي أو تجاهلها فقط:
const input = 'john smith~123 Street~Apt 4~New York~NY~12345';
const [name, street, ...others] = input.split('~');
console.log(name); // john smith
console.log(street); // 123 Street
console.log(others); // ["Apt 4", "New York", "NY", "12345"]
من المفترض أن يكون مرجعًا للقراءة فقط للقيم واستخدمت const
تصريح.
استمتع بـES6!
على الرغم من أن هذه ليست الطريقة الأسهل، إلا أنه يمكنك القيام بذلك:
var addressString = "~john smith~123 Street~Apt 4~New York~NY~12345~",
keys = "name address1 address2 city state zipcode".split(" "),
address = {};
// clean up the string with the first replace
// "abuse" the second replace to map the keys to the matches
addressString.replace(/^~|~$/g).replace(/[^~]+/g, function(match){
address[ keys.unshift() ] = match;
});
// address will contain the mapped result
address = {
address1: "123 Street"
address2: "Apt 4"
city: "New York"
name: "john smith"
state: "NY"
zipcode: "12345"
}
تحديث لـ ES2015، باستخدام التدمير
const [address1, address2, city, name, state, zipcode] = addressString.match(/[^~]+/g);
// The variables defined above now contain the appropriate information:
console.log(address1, address2, city, name, state, zipcode);
// -> john smith 123 Street Apt 4 New York NY 12345
حسنًا، أسهل طريقة ستكون مثل:
var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]
لو تم العثور على سبليتر عندها فقط
تقسيمها
وإلا قم بإرجاع نفس السلسلة
function SplitTheString(ResultStr) { if (ResultStr != null) { var SplitChars = '~'; if (ResultStr.indexOf(SplitChars) >= 0) { var DtlStr = ResultStr.split(SplitChars); var name = DtlStr[0]; var street = DtlStr[1]; } } }
شيء مثل:
var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];
ربما سيكون أسهل
يمكنك استخدام split
لتقسيم النص.
كبديل، يمكنك أيضا استخدام match
على النحو التالي
var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);
console.log(matches);
document.write(matches);
التعبير العادي [^~]+
سوف تتطابق مع جميع الشخصيات باستثناء ~
وإرجاع التطابقات في مصفوفة.يمكنك بعد ذلك استخراج التطابقات منه.
كان زاك على حق في هذا..باستخدام طريقته، يمكنك أيضًا إنشاء مصفوفة تبدو "متعددة الأبعاد".لقد قمت بإنشاء مثال سريع في JSFiddle http://jsfiddle.net/LcnvJ/2/
// array[0][0] will produce brian
// array[0][1] will produce james
// array[1][0] will produce kevin
// array[1][1] will produce haley
var array = [];
array[0] = "brian,james,doug".split(",");
array[1] = "kevin,haley,steph".split(",");
هذا string.split("~")[0];
ينجز الأمور.
مصدر: String.prototype.split()
نهج وظيفي آخر باستخدام الكاري وتكوين الوظيفة.
إذن أول شيء سيكون دالة الانقسام.نريد أن نجعل هذا "john smith~123 Street~Apt 4~New York~NY~12345"
في هذا ["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]
const split = (separator) => (text) => text.split(separator);
const splitByTilde = split('~');
حتى الآن يمكننا استخدام المتخصصة لدينا splitByTilde
وظيفة.مثال:
splitByTilde("john smith~123 Street~Apt 4~New York~NY~12345") // ["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]
للحصول على العنصر الأول يمكننا استخدام list[0]
المشغل أو العامل.دعونا نبني أ first
وظيفة:
const first = (list) => list[0];
الخوارزمية هي:قم بالتقسيم حسب النقطتين ثم احصل على العنصر الأول من القائمة المحددة.حتى نتمكن من تكوين تلك الوظائف لبناء الشكل النهائي لدينا getName
وظيفة.يبنون compose
وظيفة مع reduce
:
const compose = (...fns) => (value) => fns.reduceRight((acc, fn) => fn(acc), value);
والآن استخدامه لتأليف splitByTilde
و first
المهام.
const getName = compose(first, splitByTilde);
let string = 'john smith~123 Street~Apt 4~New York~NY~12345';
getName(string); // "john smith"
نظرًا لأن سؤال التقسيم على الفواصل مكرر مع هذا السؤال، أضف هذا هنا.
إذا كنت تريد تقسيم حرف ما والتعامل أيضًا مع المسافات البيضاء الإضافية التي قد تتبع هذا الحرف، وهو ما يحدث غالبًا مع الفواصل، فيمكنك استخدام replace
ثم split
, ، مثله:
var items = string.replace(/,\s+/, ",").split(',')
حاول في جافا سكريبت عادي
//basic url=http://localhost:58227/ExternalApproval.html?Status=1
var ar= [url,statu] = window.location.href.split("=");
استخدم هذا الكود--
function myFunction() {
var str = "How are you doing today?";
var res = str.split("/");
}