2012-02-08 121 views
0

我有这样的JavaScript字符串:获取字符串和数字用正则表达式

一些字符串27

,也可能是

一些字符串

串123

甚至

串23A - 或 - 线23a

所以,换句话说,它总是一个字符串。有时以数字结尾,有时不以。有时候这个号码最后只有一个字母(只有一个)。

现在的问题是,我必须拆分这个字符串。我需要存储在两个变量中的字符串和数字(​​包括字母,如果有的话)。像:

一些字符串27

无功海峡= “一些字符串” 变种数= 27;

我可能需要用正则表达式来做到这一点。但我不知道如何。

有人可以帮我解决这个问题吗?

+0

如果它是'一些字符串27 A'你希望你的2个变量是什么? – anubhava 2012-02-08 08:44:41

+0

@anubhava然后它应该仍然包含两个变量。 *** var str =“一些字符串”***和*** var number =“27 A”*** – w00 2012-02-08 08:49:37

+0

well'“27 A”'不是一个真正的数字,您可以使用一些更好的命名变量pls: ) – anubhava 2012-02-08 08:51:54

回答

1

你应该使用这个表达式:

var arr = s.match(/^(\D+?)\s*(\d+(?:\s+[A-Z])?)$/i); 

然后使用:

var str = arr[1]; 
var number = arr[2]; 

假设s是包含原始文本的变量;

0

尝试用以下的正则表达式:

/^([^\d]*)(\d+\s*[a-z]?)?$/i 
0

试试这个;

var r = new RegExp("/[0-9]+\w?/"); 
var s = "some letters 125a"; 
console.log(s.match(r)); 
1

你可以用函数来完成它:

function splitStringsNumbers(str) 
{ 
    return 
    { 
     Numbers: str.match(/[0-9]+/g) 
     Strings: str.match(/^[0-9]+/g) 
    } 
} 

现在这样使用它:

var obj = splitStringsNumbers("string 23A") 
console.log(obj.Strings[0]); //print string 
console.log(obj.Numbers[0]); //print 23 
console.log(obj.Numbers[1]); //print A 

如果你想在2-14作为数字变量, 你可以使用parseInt(str)。 此外,这种解决方案只适用于整数,与浮点数使用它(如字符串23.4A),你需要改变一点正则表达式。

1

根据你提供了什么正则表达式应该是:

/(.*) (\d+ ?[A-Z]?)$/i 

什么都可以串。 数字锚定到最后,它由单个空格与字符串分隔,最后的空格和字母是可选的。

var v='some string 27'; 
var arr = v.match(/(.*) (\d+ ?[A-Z]?)$/i); 
var str = arr[1]; 
var num = arr[2];