سؤال

لدي هذه السلسلة

'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

سوف ترغب في النظر في جافا سكريبت substr أو ينقسم, ، لأن هذه ليست مهمة مناسبة لـ jQuery.

حسنًا، أسهل طريقة ستكون مثل:

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("/");

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top