2011-08-05 94 views
0

我有一个字符串,我必须做的jQuery/JavaScript的两两件事:我该如何做这个正则表达式?

  1. 删除所有字符(数字,符号,等等)的第一个字母字符(A-ZA-Z)之前;
  2. 将移除的字符串保存在变量中;将结果保存在另一个中;

尝试(与SO一些建议)this

var str = '00 - 12:a - Hello Maeco 4 !!!'; 
var parts = str.split(/^[^a-zA-Z]+/); 
alert(parts[0]); 
alert(parts[1]); 

但它不保存删除字符串。任何帮助?

+1

正则表达式最好用样本数据和样本输出来描述,或者在你的情况下,你想在'parts [0]'和'parts [1]'中做什么。 – Shef

+0

部分[0]应该是被删除的字符串,部分[1]是正则表达式之后的字符串。这是你的问题吗? :) – markzzz

+0

你还没有使用一个例子。你需要零件[0]中的'00 - 12:'和'零件[1]'中的'你好Maeco 4 !!!'吗? – Shef

回答

3

可以使用str.match功能,并且第一个字母字符匹配之前的一切:(。*?)

http://jsfiddle.net/R9HtC/

var str = '00 - 12:a - Hello Maeco 4 !!!'; 
var parts = str.match(/^(.*?)([a-zA-Z].*)/); 
alert(parts[0]); 
alert(parts[1]); 
alert(parts[2]); 

做每件事的比赛,但*?使它不贪婪,因为它找到了第一个字母字符之前可能的最短匹配。

编辑

如果要满足的情况下,没有字母,下面的工作:

http://jsfiddle.net/y3RGn/

var str = '00 - 12:'; 
var parts = str.match(/^(.*?)([a-zA-Z].*)?$/); 
alert(parts[0]); 
alert(parts[1]); 
alert(parts[2]); 

而且在这种情况下,部分[2]未定义。我们使用?使字母匹配成为可选项,并且将$匹配到整个字符串,所以如果没有字母字符,我们仍会匹配所有内容。

+0

+1,但你有一个问题与您的演示;) – Reigel

+0

噢,谢谢! –

2

我想捕获组将是一个不错的选择

var str = '00 - 12:a - Hello Maeco 4 !!!'; 
var regex /(.*?)([a-zA-Z].+)/ 
var match = regex.exec(str); 

然后访问团状的比赛[1]

2

首先,我不认为你想你说的话,因为这是相当收盘:

var str = '00 - 12:a - Hello Maeco 4 !!!'; 
var before = str.replace(/[a-zA-Z]+.*$/, ''); 
var after = str.replace(/^[^a-zA-Z]+/, ''); 

看到它:http://jsfiddle.net/Ya8Yb/

的问题在于你的12:a包含一个字母。

另一种方法是尝试匹配的模式更好:

var parts = str.match(/^(.*? - \b)([a-zA-Z].*)/); 
document.write('<pre>'+str+"\n"+parts[1]+"\n"+parts[2]); 

http://jsfiddle.net/7JuhV/3/

在这后一种结果:

00 - 12:a - 
Hello Maeco 4 !!! 
2

使用括号在正则表达式来提取不同子使用exec,注意它会返回一个数组,其中第一个元素是整个正则表达式匹配的数组对应于每个子串的第i个后续元素:

var str = '00 - 12:a - Hello Maeco 4 !!!'; 
var parts = /^([^a-zA-Z]+)(.*)/.exec(str); 

alert(parts[0]); // what the whole regex matched: the whole string 
alert(parts[1]); // the first part, "00 - 12:" 
alert(parts[2]); // the rest, "a - Hello Maeco 4 !!!" 

编辑:请注意,它实际上并不删除原始字符串任何东西,它根本不会改变str变量。如果你想删除第一部分加str = parts[2];

2

http://jsfiddle.net/vb6Ce/1/

var str = '00 - 12:a - Hello Maeco 4 !!!'; 
var parts = str.match(/([^a-zA-Z]*)([a-zA-Z]*.*)/); 
alert(parts[1]); 
alert(parts[2]); 

parts[1]包含已删除的字符串。
parts[2]包含字符串的其余部分。

+0

是似乎是最好的解决方案,但不是'var str = '00 - 12:';'尝试用'var parts = str.match(/(。*?)([a-zA-Z])编辑。 *?)/);'但是无法解决这个问题... – markzzz

+0

这可以通过一个小修改来完成。看我的回答,和http://jsfiddle.net/y3RGn/。 –

+0

是的,斯蒂芬的答案通过使最后一部分'*'表示0或更多'[a-zA-Z]'来解决问题。 – ace

相关问题