Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex使用javascript只返回数字_Javascript_Regex - Fatal编程技术网

Regex使用javascript只返回数字

Regex使用javascript只返回数字,javascript,regex,Javascript,Regex,如果我有一个类似“something12”或“something102”的字符串,我将如何在javascript中使用正则表达式仅返回数字部分?正则表达式: var numberPattern=/\d+/g; “something102asdfkj1948948”。匹配(数字模式) 这将返回一个包含两个元素的数组,“102”和“1948948”。按你的意愿操作。如果不匹配,则返回null 要连接它们,请执行以下操作: 'something102asdfkj1948948'。匹配(数字模式)。加

如果我有一个类似“something12”或“something102”的字符串,我将如何在javascript中使用正则表达式仅返回数字部分?

正则表达式:

var numberPattern=/\d+/g;
“something102asdfkj1948948”。匹配(数字模式)
这将返回一个包含两个元素的数组,“102”和“1948948”。按你的意愿操作。如果不匹配,则返回null

要连接它们,请执行以下操作:

'something102asdfkj1948948'。匹配(数字模式)。加入(“”)

假设您没有处理复数小数,我想这就足够了。

我想您希望从字符串中获取数字。在这种情况下,您可以使用以下选项:

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

您还可以删除所有非数字字符(
\D
[^0-9]
):

让单词_和_数字='abc123c def4567hij89'
让不带数字的单词=带数字的单词。替换(/\D/g,”);

log(没有数字的单词)
给出的答案实际上与您的问题不匹配,这意味着后面有一个数字。另外,记住,你得到了一个字符串回来;如果您确实需要一个数字,请投下结果:

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

如果您正在处理网页上的数字项目id,您的代码还可以有效地接受
元素,从其
id
中提取数字(或使用
id
的第一个父元素);如果你手头有一个
事件
,你也可以从中得到
元素。

如果你只需要数字:

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

现在,对于带小数点和减号的数字,将数字连接起来,我使用以下代码段:

const NUMERIC_REGEXP=/[-]{0,1}[\d]*[.]{0,1}[\d]+/g;
常量数字='2.2px 3.1px 4px-7.6px对象键'。匹配(数字\u REGEXP)
console.log(数字);//[“2.2”、“3.1”、“4”和“-7.6”]
如果您想捕获任何类型的数字,陈大超的IMO是正确的选择,但正则表达式可以从以下内容缩短:

/[-]{0,1}[\d]*[\.]{0,1}[\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和%,不一致的逗号和空格用法,以及文本“lin grad.ient”中额外的点/句点和连字符/破折号字符。如果我遗漏了什么,请告诉我。我唯一能看到它不能处理的是格式错误的十进制数,如“0..8”

如果确实需要一个数字数组,可以在同一行代码中转换整个数组:

array = whatever.match(/-?\d*\.?\d+/g).map(Number);
我的特定代码解析CSS函数,不需要担心点/句点字符的非数字用法,因此正则表达式可以更简单:

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

如果还需要点/逗号分隔的数字,则:

\d*\.?\d*


您可以使用来测试您的正则表达式。

其他解决方案所拥有的一切,但需要一点验证

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

使用split和regex:

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

根据@Syntle的回答,如果您只有非数字字符,您将得到一个
未捕获类型错误:无法读取null的属性“join”

如果未找到匹配项并返回空字符串,这将防止出现错误:


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

以下是使用正则表达式将字符串转换为有效的普通数或十进制数的解决方案:

//something123.777.321something to 123.777321
const str = 'something123.777.321something';
let initialValue = str.replace(/[^0-9.]+/, '');
//initialValue = '123.777.321';

//characterCount just count the characters in a given string
if (characterCount(intitialValue, '.') > 1) {
 const splitedValue = intitialValue.split('.');
 //splittedValue = ['123','777','321'];
 intitialValue = splitedValue.shift() + '.' + splitedValue.join('');
 //result i.e. initialValue = '123.777321'
}

犯错误我讨厌吹毛求疵,但这会返回一个数组,而不是一个对象(至少在chrome中是这样)。不过所有数组都是对象,不是吗?@MuhammadUmer-你试过了吗?@Onza你在
d
之前缺少反斜杠,所以
.match(/\d+//g)
@MuhammadUmer,@meder:你们两个应该联合起来:
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+//gi).join(“”))
为了清楚起见,
get_numbers/1
返回字符串数组,而不是数字。例如,它将返回:
[“102”]
*
[“102”,“12”]
*nullPerfect,这是唯一适用于小数和负数的解决方案,除了OP需要的“只是数字部分”,而不是字符串。虽然这是一个漂亮的答案,但我不认为其他答案“实际上与问题不匹配”。事实上,其他答案更通用。他们将在中间使用数字和数字。假设OP希望它只处理尾随数字,这有点冒昧。
    var str = "fooBar0123".split(/(\d+)/);
    console.log(str[0]); // fooBar
    console.log(str[1]); // 0123
//something123.777.321something to 123.777321
const str = 'something123.777.321something';
let initialValue = str.replace(/[^0-9.]+/, '');
//initialValue = '123.777.321';

//characterCount just count the characters in a given string
if (characterCount(intitialValue, '.') > 1) {
 const splitedValue = intitialValue.split('.');
 //splittedValue = ['123','777','321'];
 intitialValue = splitedValue.shift() + '.' + splitedValue.join('');
 //result i.e. initialValue = '123.777321'
}