2011-08-05 78 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

相關問題