我想將電子表格單元格引用(例如,A10
,AB100
,ABC5
)拆分爲兩個字符串部分:列引用和行引用。根據條件拆分字符串
A10
=>A
和10
AB100
=>AB
和100
...
有誰知道如何通過字符串函數來做到這一點?
我想將電子表格單元格引用(例如,A10
,AB100
,ABC5
)拆分爲兩個字符串部分:列引用和行引用。根據條件拆分字符串
A10
=>A
和10
AB100
=>AB
和100
...
有誰知道如何通過字符串函數來做到這一點?
這是最簡單的一個regular expression(正則表達式)做。例如:
var ref = "AA100";
var matches = ref.match(/^([a-zA-Z]+)([1-9][0-9]*)$/);
if (matches) {
var column = matches[1];
var row = Number(matches[2]);
console.log(column); // "AA"
console.log(row); // 100
} else {
throw new Error('invalid ref "' + ref + '"');
}
這裏的重要部分是正則表達式字面值/^([a-zA-Z]+)([1-9][0-9]*)$/
。我會帶你穿過它。
^
將正則表達式錨定到字符串的開頭。否則,你可能會匹配「123ABC456」之類的東西。[a-zA-Z]+
匹配來自a-z或A-Z的一個或多個字符。[1-9][0-9]*
只與1-9中的一個字符匹配,然後從0-9中的零個或多個字符。這確保你匹配的號碼永遠不會從零開始(即不允許「A001」)。$
將正則表達式錨定到字符串末尾,以便您不匹配「ABC123DEF」之類的內容。([a-zA-Z]+)
和([1-9][0-9]*)
的括號會「捕捉」其中的字符串,以便我們稍後可以使用matches[1]
和matches[2]
找到它們。此示例嚴格限制匹配有效的單元格引用。如果您信任您收到的數據始終有效,那麼您可以使用較不嚴格的正則表達式,但最好始終驗證您的數據,以防數據源更改或您在其他地方使用代碼。
如果您收到無效數據,您也可以自行決定要執行的操作。在這個例子中,我讓腳本引發錯誤,但在您的情況下可能會有更好的選擇(例如,提示用戶輸入另一個值)。
var res = "AA123";
//Method 1
var arr = res.match(/[a-z]+|[^a-z]+/gi);
document.write(arr[0] + "<br>" + arr[1]);
//Method 2 (as deceze suggested)
var arr = res.match(/([^\d]+)(\d+)/);
document.write("<br>" + arr[1] + "<br>" + arr[2]);
//Note here [^\d] is the same as \D
在這種情況下,您不能拆分,而是使用正則表達式來提取這些令牌。 – Dummy
'/(\ D +)(\ d +)/' - http://www.regular-expressions.info – deceze