كيف أقوم بتقسيم سلسلة ، كسر في شخصية معينة؟

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

'john smith~123 Street~Apt 4~New York~NY~12345'

باستخدام جافا سكريبت ، ما هي أسرع طريقة لتحليل ذلك

var name = "john smith";
var street= "123 Street";
//etc...
0
وأضاف تحرير
الآراء: 1

11 إجابة

ستحتاج إلى الاطلاع على substr </< a> أو تقسيم لأن هذا ليست حقا مهمة مناسبة ل jQuery

0
وأضاف

إذا تم العثور على Spliter فقط

تقسيمها

else return the same string

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];
        }
    }
}
0
وأضاف

يمكنك استخدام split لتقسيم النص.

وكبديل ، يمكنك أيضًا استخدام match على النحو التالي

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);

console.log(matches);
document.write(matches);
</div> </div>

سيطابق regex [^ ~] + جميع الأحرف باستثناء ~ وإرجاع التطابقات في مصفوفة. يمكنك بعد ذلك استخراج المطابقات منه.

0
وأضاف
وأضاف المؤلف Andrew Willems, مصدر
هذا العمل بالنسبة لي! str.split() ؛ لم تكن تعمل في Firefox ، ولكن هذا العمل في Chrome و Firefox.
وأضاف المؤلف Sandeep, مصدر

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

var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]
0
وأضاف

وفقًا لـ ECMAScript6 ES6 ، فإن الطريقة النظيفة تدمر المصفوفات:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true"> <div class="snippet-code">

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
</div> </div>

قد يكون لديك عناصر إضافية في سلسلة الإدخال. في هذه الحالة ، يمكنك استخدام عامل تشغيل الاستراحة للحصول على صفيف لبقية أو مجرد تجاهلها:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true"> <div class="snippet-code">

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"]
</div> </div>

من المفترض مرجع للقراءة فقط للقيم واستخدم const إعلان.

استمتع بـ ES6!

0
وأضاف
Sallar Yep. بفضل الزميل!
وأضاف المؤلف hallaji, مصدر
يمكنك أيضًا تخطي عنصر: const [name،، unit، ... others] = ...
وأضاف المؤلف Sallar, مصدر

على الرغم من أن هذه ليست أبسط طريقة ، يمكنك القيام بذلك:

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
0
وأضاف
هل يمكن أن توضح كيف يعمل هذا؟
وأضاف المؤلف Glycan, مصدر
أولاً لدينا سلسلة مفصولة بعلامات '~' ومجموعة من مفاتيح . تستخدم وظيفة الاستبدال الثانية [^ ~] + لمطابقة كل جزء مختلف (مثل '123 Street' ، 'Apt 4' ، إلخ) وتسمى الوظيفة لكل جزء ، وتمريرها كوسيطة . في كل تشغيل ، تأخذ الدالة المفتاح الأول من صفيف المفاتيح (أيضًا إزالته باستخدام Array.unshift) وتعيين المفتاح والجزء إلى كائن العنوان.
وأضاف المؤلف ewino, مصدر

لست بحاجة إلى jQuery.

var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];
0
وأضاف
شكرًا جزيلاً للإشارة إلى أن split يقبل تعبيرًا عاديًا!
وأضاف المؤلف phunehehe, مصدر
لست بحاجة إلى إضافة تعبير منطقي لهذا الاستبدال البسيط. سوف يجعلها أبطأ فقط إذا كان أي شيء. يمكنك تغييرها إلى علامات اقتباس لاستبدال سلسلة بسيطة.
وأضاف المؤلف Anish Gupta, مصدر

باستخدام JavaScript وظيفة:

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.
0
وأضاف
ImaginedDesign أنت مخطئ. تتيح لك JavaScript استخدام علامات الاقتباس الفردية وعلامات الاقتباس المزدوجة بالتبادل. والفرق الوحيد هو أن أي اقتباس يجب أن يتم التغاضي عنه - \ " أو \" . كان النمط الذي رأيته في إجابات الناس مجرد مصادفة ؛ نوع الاقتباس الاستخدام هو تفضيل شخصي.
وأضاف المؤلف Rory O'Kane, مصدر
يبدو كما لو أن JavaScript يتطلب الانقسام لاستخدام علامات الاقتباس المفردة ويتطلب jQuery استخدام علامات الاقتباس المزدوجة. آمل أن يساعد هذا الآخرين.
وأضاف المؤلف ImaginedDesign, مصدر
انها تماما wacko لتسمية مجموعة "انقسام". يبدو أن اسم الصفيف هو وظيفة. مربكة جدا لأي شخص لديه معرفة محدودة.
وأضاف المؤلف gravityboy, مصدر

شيء مثل:

var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];

ربما سيكون من الأسهل

0
وأضاف
لا ، أنت تريد إما split ("~") أو split (/ ~ /) ولكن لا split ("/ ~ /") . هذا الأخير سوف ينقسم فقط "John/~// Smith" وليس "John ~ Smith" .
وأضاف المؤلف Andrew Willems, مصدر

Zach had this one right.. using his method you could also make a seemingly "multi-dimensional" array.. I created a quick example at 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(",");
0
وأضاف

استخدم هذا الكود ------

function myFunction() {
var str = "How are you doing today?";
var res = str.split("/");

}
0
وأضاف