หากฉันมีสตริงเช่น "something12" หรือ "something102" ฉันจะใช้ regex ใน javascript เพื่อส่งกลับเฉพาะส่วนตัวเลขได้อย่างไร
หากฉันมีสตริงเช่น "something12" หรือ "something102" ฉันจะใช้ regex ใน javascript เพื่อส่งกลับเฉพาะส่วนตัวเลขได้อย่างไร
คำตอบ:
นิพจน์ทั่วไป:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
สิ่งนี้จะส่งคืนอาร์เรย์ที่มีสององค์ประกอบภายใน '102' และ '1948948' ดำเนินการตามที่คุณต้องการ ถ้ามันไม่ตรงกับใด ๆ มันจะกลับเป็นโมฆะ
ในการเชื่อมต่อพวกเขา:
'something102asdfkj1948948'.match( numberPattern ).join('')
สมมติว่าคุณไม่ได้จัดการกับทศนิยมที่ซับซ้อนนี่น่าจะพอแล้ว
d
ดังนั้น.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
คุณสามารถดึงอักขระที่ไม่ใช่ตัวเลขทั้งหมด ( \D
หรือ[^0-9]
):
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
สำหรับตัวเลขที่มีเศษส่วนทศนิยมและเครื่องหมายลบฉันใช้ตัวอย่างนี้:
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
พบเครื่องมือที่ช่วยให้คุณสามารถแก้ไขการแสดงออกปกติสายตา: JavaScript นิพจน์ปกติ Parser & Visualizer
ปรับปรุง:
นี่เป็นอีกคนหนึ่งที่คุณยังสามารถดีบัก regexp: ทดสอบ regex ออนไลน์และดีบัก
ปรับปรุง:
ปรับปรุง:
หากคุณต้องการตัวเลขเท่านั้น:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
ตอนนี้คุณได้รับตัวเลขเข้าร่วม
ฉันเดาว่าคุณต้องการรับจำนวนจากสตริง ในกรณีนี้คุณสามารถใช้สิ่งต่อไปนี้:
// 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
get_numbers/1
ส่งกลับอาร์เรย์ของสตริงไม่ใช่จำนวน สำหรับตัวอย่างของคุณมันจะกลับมา: * ["102"]
* ["102", "12"]
* null
คำตอบที่ให้นั้นไม่ตรงกับคำถามของคุณซึ่งบ่งบอกถึงจำนวนต่อท้าย นอกจากนี้โปรดจำไว้ว่าคุณได้รับสายกลับ; หากคุณต้องการตัวเลขจริง ๆให้ส่งผลลัพธ์:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
หากคุณกำลังจัดการกับรหัสรายการที่เป็นตัวเลขบนหน้าเว็บโค้ดของคุณอาจยอมรับได้อย่างเป็นประโยชน์Element
ดึงตัวเลขจากid
(หรือผู้ปกครองคนแรกของมันด้วยid
); หากคุณมีEvent
ประโยชน์คุณก็น่าจะได้ประโยชน์Element
จากสิ่งนั้นเช่นกัน
var result = input.match(/\d+/g).join([])
IMO # 3 คำตอบในเวลานี้โดย Chen Dachao เป็นวิธีที่เหมาะสมที่จะไปหากคุณต้องการจับหมายเลขใด ๆ แต่การแสดงออกปกติสามารถสั้นลงได้จาก:
/[-]{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"]
ฉันใช้ตัวอย่างการไล่ระดับสี MDN เชิงเส้นเพื่อทดสอบ regexp อย่างสมบูรณ์และไม่จำเป็นต้องเลื่อนที่นี่ ฉันคิดว่าฉันได้รวมความเป็นไปได้ทั้งหมดในแง่ของจำนวนลบทศนิยมส่วนต่อท้ายหน่วยเช่น deg และ% เครื่องหมายจุลภาคและการใช้พื้นที่ที่ไม่สอดคล้องกันและการเพิ่มจุด / รอบระยะเวลา " โปรดแจ้งให้เราทราบหากฉันทำอะไรหาย สิ่งเดียวที่ฉันเห็นว่ามันไม่ได้จัดการคือตัวเลขทศนิยมที่มีรูปแบบไม่ดีเช่น "0..8"
หากคุณต้องการอาเรย์ของตัวเลขคุณสามารถแปลงอาเรย์ทั้งหมดในรหัสบรรทัดเดียวกัน:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
รหัสเฉพาะของฉันซึ่งแยกวิเคราะห์ฟังก์ชั่น CSS ไม่จำเป็นต้องกังวลเกี่ยวกับการใช้ตัวอักษรที่ไม่ใช่ตัวเลขของตัวอักษร dot / period ดังนั้นการแสดงออกปกติอาจทำได้ง่ายขึ้น:
/-?[\d\.]+/g
ใช้ split และ regex:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
เป็นต่อ @ คำตอบของ Syntle Uncaught TypeError: Cannot read property 'join' of null
ถ้าคุณมีตัวละครที่เป็นตัวเลขเพียงคนเดียวไม่ใช่คุณจะได้รับ
วิธีนี้จะป้องกันข้อผิดพลาดหากไม่พบการแข่งขันและส่งคืนสตริงว่าง:
('something'.match( /\d+/g )||[]).join('')
หากคุณต้องการให้คั่นด้วยจุด / เครื่องหมายจุลภาคแล้ว:
\d*\.?\d*
หรือ
[0-9]*\.?[0-9]*
คุณสามารถใช้https://regex101.com/เพื่อทดสอบ regexes ของคุณ
ทุกอย่างที่โซลูชันอื่นมี แต่มีการตรวจสอบน้อย
// 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