我有一个字符串,我必须在jQuery / javascript上做两件事:
尝试(有关SO的一些建议)this:
var str = '00 - 12:a - Hello Maeco 4 !!!';
var parts = str.split(/^[^a-zA-Z]+/);
alert(parts[0]);
alert(parts[1]);
但它不会保存已删除的字符串。有帮助吗?
答案 0 :(得分:3)
您可以使用str.match函数,并匹配第一个字母字符前的所有内容:
var str = '00 - 12:a - Hello Maeco 4 !!!';
var parts = str.match(/^(.*?)([a-zA-Z].*)/);
alert(parts[0]);
alert(parts[1]);
alert(parts[2]);
(。*?)匹配所有内容,但*?使它不贪婪,因为它在第一个字母字符之前找到了最短的匹配。
修改强>
如果您想要满足没有字母字符的情况,可以使用以下方法:
var str = '00 - 12:';
var parts = str.match(/^(.*?)([a-zA-Z].*)?$/);
alert(parts[0]);
alert(parts[1]);
alert(parts[2]);
在这种情况下,部分[2]是未定义的。我们用的是?使字母匹配可选,并将$锚定到整个字符串,所以如果没有字母字符,我们仍然匹配所有内容。
答案 1 :(得分:2)
我认为捕捉群体是一个不错的选择
var str = '00 - 12:a - Hello Maeco 4 !!!';
var regex /(.*?)([a-zA-Z].+)/
var match = regex.exec(str);
然后访问匹配[1]
等组答案 2 :(得分: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]);
后者导致:
00 - 12:a -
Hello Maeco 4 !!!
答案 3 :(得分:2)
使用正则表达式中的括号来使用exec
提取不同的子串,注意它将返回一个数组,其中第一个元素是整个正则表达式与对应于每个子串的后续元素匹配的:
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];
。
答案 4 :(得分:2)
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]
包含字符串的其余部分。