জাভাস্ক্রিপ্ট ব্যবহার করে রেজিেক্স কেবলমাত্র সংখ্যাগুলি ফেরত দিতে


129

আমার কাছে যদি কিছু "12" বা "কিছু 1010" এর মতো স্ট্রিং থাকে তবে আমি কীভাবে জাভাস্ক্রিপ্টে একটি রেজেক্স ব্যবহার করব কেবল সংখ্যার অংশগুলি ফেরত দিতে?

উত্তর:


226

নিয়মিত অভিব্যক্তি:

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )

এটি '102' এবং '1948948' এর ভিতরে দুটি উপাদান সহ একটি অ্যারে ফিরিয়ে আনবে। আপনার ইচ্ছামতো পরিচালনা করুন। এটি যদি কোনওর সাথে মেলে না তবে এটি বাতিল হয়ে যাবে।

তাদের একত্রিত করার জন্য:

'something102asdfkj1948948'.match( numberPattern ).join('')

ধরে নিই যে আপনি জটিল দশমিকের সাথে মোকাবেলা করছেন না, এটি আমার মনে হয় যথেষ্ট।


3
মাত্রই ভুল করে। নীট-পিক হতে ঘৃণা করে, তবে এটি একটি অ্যারে দেয়, কোনও বস্তু নয় (কমপক্ষে ক্রোমে থাকে)।
মাউস

14
সমস্ত অ্যারে যদিও অবজেক্ট, না?
মধ্যস্থতা ওমুরিলিভ

6
@ মুহাম্মাদ উমর - আপনি কি চেষ্টা করে দেখলেন?
মধ্যস্বত্বভোগী ওমরালিভিভ

2
@ ওঞ্জা আপনি ব্যাকস্ল্যাশ এর আগে মিস করছেন d, সুতরাং.match(/\d+/g)
মধ্যস্থতা ওমুরালিভ

10
@ মুহম্মদ উমার, @ মিডার: আপনার দু'জনকে বাহিনী একত্রিত করা উচিত: parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
জোসে মাইক 12'17

199

আপনি সমস্ত অ-অঙ্কের অক্ষর ( \Dবা [^0-9]) কেড়ে নিতে পারেন :

let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');

console.log(word_Without_Numbers)


ঠিক আছে, বাদে ওপি "কেবলমাত্র সংখ্যার অংশগুলি" চায় না স্ট্রিংকে।
স্কট ফ্রেলে

24

দশমিক ভগ্নাংশ এবং বিয়োগ চিহ্ন সহ সংখ্যার জন্য, আমি এই স্নিপেটটি ব্যবহার করি:

 var NUMERIC_REGEXP = /[-]{0,1}[\d]*[.]{0,1}[\d]+/g;

'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]

আপডেট: - 7/9/2018

এমন একটি সরঞ্জাম পেয়েছে যা আপনাকে নিয়মিত অভিব্যক্তিটি চাক্ষুষভাবে সম্পাদনা করার অনুমতি দেয়: জাভাস্ক্রিপ্ট নিয়মিত এক্সপ্রেশন পার্সার এবং ভিজ্যুয়ালাইজার

হালনাগাদ:

এখানে আরেকটি রয়েছে যার সাহায্যে আপনি এমনকি ডিবাগার রিজেপ্সপ করতে পারেন: অনলাইন রেইগেক্স পরীক্ষক এবং ডিবাগার

হালনাগাদ:

আর একটি: RegExr

হালনাগাদ:

রেজেক্সার এবং রেজেক্স পাল


পারফেক্ট, একমাত্র সমাধান যা দশমিক এবং নেতিবাচক সংখ্যাগুলির সাথে কাজ করে
ArmaGeddON

17

আপনি যদি কেবল সংখ্যা চান:

var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714

এখন আপনি অঙ্কগুলিতে যোগদান করুন


9

আমার ধারণা আপনি স্ট্রিং থেকে নম্বর (গুলি) পেতে চান। কোন ক্ষেত্রে, আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

// Returns an array of numbers located in the string
function get_numbers(input) {
    return input.match(/[0-9]+/g);
}

var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');

alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null

1
কেবল এটি পরিষ্কার করার জন্য get_numbers/1, সংখ্যার নয়, স্ট্রিংয়ের একটি অ্যারে প্রদান করে। আপনার উদাহরণস্বরূপ, এটি ফিরে আসবে: * ["102"]* ["102", "12"]* নাল
সান ট্রান-এনগুইন

2

প্রদত্ত উত্তরগুলি আসলে আপনার প্রশ্নের সাথে মেলে না, যা একটি পিছনের সংখ্যা বোঝায় । এছাড়াও, মনে রাখবেন যে আপনি স্ট্রিং ফিরে পেয়েছেন; আপনার যদি আসলেই কোনও সংখ্যার প্রয়োজন হয় তবে ফলাফলটি নিক্ষেপ করুন:

item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);

আপনি যদি কোনও ওয়েব পৃষ্ঠায় সংখ্যাসূচক আইটেম আইডির সাথে কাজ করে থাকেন তবে আপনার কোডটি কার্যকরভাবে কোনও গ্রহণ করতে পারে Element, তার id(বা এটির সাথে প্রথম পিতামাতাদের id) থেকে সংখ্যাটি বের করে ; যদি আপনি কোনও Eventসহজ হয়ে থাকেন তবে আপনি সম্ভবত এটি Elementথেকেও এটি পেতে পারেন ।


যদিও এটি একটি নিফটির উত্তর, আমি মনে করি না যে অন্যান্য উত্তরগুলি "[প্রশ্নের] প্রশ্নের সাথে আসলে মিলছে না"। আসলে অন্যান্য উত্তরগুলি আরও বহুমুখী। তারা মাঝের সংখ্যাগুলির পাশাপাশি পিছনের সংখ্যাগুলি নিয়ে কাজ করবে। এটি অনুমান করা কিছুটা অনুমান করা যায় যে ওপি এটি কেবলমাত্র পিছনের সংখ্যা দিয়ে কাজ করতে চায়।
Xandor


2

চেন ডাচাও এই মুহুর্তে আইএমও # 3 এর উত্তর হ'ল যদি আপনি কোনও ধরণের সংখ্যা ক্যাপচার করতে চান তবে সঠিক পথ যাবেন তবে নিয়মিত প্রকাশটি এ থেকে সংক্ষিপ্ত করা যেতে পারে:

/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g

প্রতি:

/-?\d*\.?\d+/g

উদাহরণস্বরূপ, এই কোড:

"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)

এই অ্যারে উত্পন্ন:

["217","255","0","0","-0.8","-255","0","0","0","70.71"]

আমি একটি এমডিএন রৈখিক গ্রেডিয়েন্ট উদাহরণ বসচার করেছি যাতে এটি সম্পূর্ণরূপে রেজিএক্সপেক্ট পরীক্ষা করে এবং এখানে স্ক্রোল করার প্রয়োজন হয় না। আমি মনে করি যে আমি নেতিবাচক সংখ্যা, দশমিক, ডিগ্রি এবং% এর মতো ইউনিট প্রত্যয়, অসামঞ্জস্য কমা এবং স্থান ব্যবহার এবং "লিন-গ্রেড.এইন্টের লেখার মধ্যে অতিরিক্ত ডট / পিরিয়ড এবং হাইফেন / ড্যাশ অক্ষরের ক্ষেত্রে সমস্ত সম্ভাবনা যুক্ত করেছি I "। যদি আমি কিছু মিস করছি তবে দয়া করে আমাকে জানান। আমি দেখতে পাচ্ছি যে এটি হ্যান্ডেল করে না এটি হ'ল "0..8" এর মতো একটি খারাপভাবে গঠিত দশমিক সংখ্যা।

আপনি যদি সত্যিই সংখ্যার একটি অ্যারে চান, আপনি একই কোডের লাইনে পুরো অ্যারে রূপান্তর করতে পারেন:

array = whatever.match(/-?\d*\.?\d+/g).map(Number);

আমার নির্দিষ্ট কোড, যা সিএসএস ফাংশনগুলি বিশ্লেষণ করছে, বিন্দু / পিরিয়ডের অক্ষরের অ-সংখ্যা ব্যবহার সম্পর্কে চিন্তা করার দরকার নেই, তাই নিয়মিত প্রকাশটি আরও সহজ হতে পারে:

/-?[\d\.]+/g

2

বিভক্তকরণ এবং রেজেক্স ব্যবহার:

    var str = "fooBar0123".split(/(\d+)/);
    console.log(str[0]); // fooBar
    console.log(str[1]); // 0123

1

@ সিন্টেলের উত্তর অনুসারে, আপনার যদি কেবলমাত্র অ-সংখ্যাযুক্ত অক্ষর থাকে তবে আপনি একটি পাবেন Uncaught TypeError: Cannot read property 'join' of null

কোনও মিল না পাওয়া গেলে এটি ত্রুটিগুলি রোধ করে এবং একটি খালি স্ট্রিং ফিরে দেয়:

('something'.match( /\d+/g )||[]).join('')


0

আপনি যদি বিন্দু / কমা দ্বারা পৃথকীকৃত সংখ্যাও চান তবে:

\d*\.?\d*

অথবা

[0-9]*\.?[0-9]*

আপনার রেজিক্সগুলি পরীক্ষা করতে আপনি https://regex101.com/ ব্যবহার করতে পারেন ।


0

অন্যান্য সমাধানগুলির যা কিছু আছে তবে কিছুটা বৈধতা সহ

// value = '675-805-714'
const validateNumberInput = (value) => { 
    let numberPattern = /\d+/g 
    let numbers = value.match(numberPattern)

    if (numbers === null) {
        return 0
    }  

    return parseInt(numbers.join([]))
}
// 675805714
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.