/ \ S / g এবং / \ s + / g এর মধ্যে পার্থক্য আছে কি?


89

যখন আমাদের কাছে স্ট্রিং থাকে যাতে স্পেস অক্ষর থাকে:

var str = '  A B  C   D EF ';

এবং আমরা স্ট্রিং থেকে স্পেসগুলি সরাতে চাই (আমরা এটি চাই 'ABCDEF':)।

এই উভয়:

str.replace(/\s/g, '')

এবং এই:

str.replace(/\s+/g, '')

সঠিক ফলাফল প্রদান করবে।

এর অর্থ কি এই +পরিস্থিতিতে অতিমাত্রায় প্রয়োজন? এই পরিস্থিতিতে two দুটি নিয়মিত প্রকাশের মধ্যে কি কোনও পার্থক্য রয়েছে (যেমন তারা কি কোনও উপায়ে বিভিন্ন ফলাফল আনতে পারে)?


আপডেট: পারফরম্যান্স তুলনা - /\s+/gদ্রুত। এখানে দেখুন: http://jsperf.com/s-vs-s



4
আমি কল্পনা করতে পারি \s+দ্রুততর, কারণ এটি \sসাদা জায়গার অংশগুলি প্রতিস্থাপন করতে পারে, তবে প্রতিটি সাদা স্থান পৃথক পৃথকভাবে প্রতিস্থাপন করতে হবে?
KooiInc

4
@ কোইইঙ্ক: সঠিক, কারণ এটি কম সময়ের সাথে মেলে / প্রতিস্থাপন করে।
বোল্টক্লক

উত্তর:


219

প্রথম রেজেক্সে, প্রতিটি স্থানের অক্ষর খালি স্ট্রিংয়ের সাথে অক্ষর অনুসারে অক্ষর প্রতিস্থাপন করা হচ্ছে।

দ্বিতীয় রেজেক্সে, স্পেস অক্ষরের প্রতিটি সংলগ্ন স্ট্রিং এর কারণে খালি স্ট্রিংয়ের সাথে প্রতিস্থাপন করা হচ্ছে +

যাইহোক, অন্য যে কোনও কিছুর দ্বারা 0 0 এর গুণক যেমন 0 হয় ঠিক তেমনই মনে হয় যে উভয় পদ্ধতিই একইভাবে ফাঁক ফেলে।

আপনি যদি প্রতিস্থাপনের স্ট্রিংটি এতে পরিবর্তন করেন '#'তবে পার্থক্যটি আরও স্পষ্ট হয়:

var str = '  A B  C   D EF ';
console.log(str.replace(/\s/g, '#'));  // ##A#B##C###D#EF#
console.log(str.replace(/\s+/g, '#')); // #A#B#C#D#EF#

28

\sএর অর্থ "একটি স্থান", এবং এর \s+অর্থ "এক বা একাধিক স্পেস"।

তবে, যেহেতু আপনি /gপতাকাটি ব্যবহার করছেন (সমস্ত উপস্থিতি প্রতিস্থাপন করুন) এবং খালি স্ট্রিংয়ের পরিবর্তে, আপনার দুটি এক্সপ্রেশন একই প্রভাব ফেলে।


তবে দ্বিতীয় সংস্করণটি সম্ভবত দ্রুত হবে।
টিম পিটজেকার

এর অর্থ কি, আমি / g ব্যবহার করার দরকার নেই যদি আমি \ s + ব্যবহার করি
গৌরব

4
@ গৌরব: না। কারণ এরপরে এটি কেবল প্রথমটি প্রতিস্থাপন করবে \s+, বাকিটি অক্ষত রেখে। উদাহরণস্বরূপ, ' foo bar '.replace(/\s+/, '')আপনাকে কেবল 'foo bar ' দুটি
আরগা সংশ্লেষকে আরগ

@ গৌরব আমার মনে হয় না। আপনি যদি এই সংশোধকটিকে বাদ দেন তবে gকেবল প্রথম স্থান সাদা বাক্সে স্থানান্তরিত হবে।
KooiInc

10

একটি ম্যাচের পরিস্থিতিতে প্রথমটি হোয়াইটস্পেস প্রতি এক ম্যাচ ফিরিয়ে দেয়, যখন দ্বিতীয়টি শ্বেত স্পেসগুলির প্রতিটি গ্রুপের জন্য একটি ম্যাচ ফেরত দেয়।

ফলাফলটি একই কারণ আপনি এটি একটি খালি স্ট্রিং দিয়ে প্রতিস্থাপন করছেন। উদাহরণস্বরূপ আপনি যদি এটি 'x' দিয়ে প্রতিস্থাপন করেন তবে ফলাফলগুলি পৃথক হবে।

str.replace(/\s/g, '') 'xxAxBxxCxxxDxEF' ফিরিয়ে দেবে

যখন str.replace(/\s+/g, '')'xAxBxCxDxEF' ফেরত আসবে

কারণ \sপ্রতিটি হোয়াইটস্পেসের সাথে মেলে, প্রতিটিকে 'এক্স' দিয়ে প্রতিস্থাপন করে এবং \s+একাধিক ক্রমবর্ধমান সাদা স্থানকে একক 'এক্স' দিয়ে প্রতিস্থাপন করে হোয়াইটস্পেসের গ্রুপগুলির সাথে মেলে।


3

+"" এক বা একাধিক অক্ষর "এবং প্লাস ব্যতীত এর অর্থ" একটি অক্ষর "। আপনার ক্ষেত্রে উভয় একই আউটপুট ফলাফল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.