JavaScript(JS) 透過 正則表達式(正規表示式) 計算 中英數字的實際寬度(中文算2個字)進行字串切割
JavaScript(JS) 透過 正則表達式(正規表示式) 計算 中英數字的實際寬度(中文算2個字)進行字串切割/分割/分段 (子字串)
資料來源: https://blog.typeart.cc/JavaScript%E8%A8%88%E7%AE%97%E5%90%AB%E4%B8%AD%E8%8B%B1%E6%96%87%E5%AD%97%E7%9A%84%E5%AD%97%E4%B8%B2%E9%95%B7%E5%BA%A6/
https://www.cnblogs.com/PatrickChen/archive/2008/10/17/1313250.html
Code
function Wlen(str) { return str.replace(/[^\x00-\xff]/g, "xx").length; } function Wsubstring(data, start, len) { var Result = data; var m = start; var n = Math.floor(len / 2); //函式會回傳小於等於所給數字的最大整數。 if ((Wlen(data) - m - len) <= 0) { try { Result = data.substr(m); } catch (e) { Result = ""; } } else { for (var i = n; i < data.length; i++) { try { if (Wlen(data.substr(m, i)) >= len) { Result = data.substr(m, i); break; } } catch (e) { Result = data.substr(m); } } } return Result; } /* 0,5->jash中 0,6->jash中 0,7->jash中英 0,8->jash中英 1,5->ash中 1,6->ash中英 1,7->ash中英 1,8->ash中英文 2,5->sh中英 2,6->sh中英 2,7->sh中英文 2,8->sh中英文 3,5->h中英 3,6->h中英文 3,7->h中英文 3,8->h中英文處 4,5->中英文 4,6->中英文 4,7->中英文處 4,8->中英文處 5,5->英文處 5,6->英文處 5,7->英文處理 5,8->英文處理 */
PS.正規表示式/ 正規表達式教學
. 點,匹配任何字符
^ 開始錨,匹配字符串的開頭
$ 結束錨,匹配字符串的結尾
* 星號,匹配零個或多個(貪婪)
+ 加號,匹配一個或多個(貪婪)
? 問題,匹配零或一(非貪婪)
[abc] 字符類,如果{‘a’,’b’,’c’}中的一個匹配則匹配
[^abc] 反相的類,如果不是{‘a’,’b’,’c’}中的一個,則匹配。注意:此功能當前在某些字符範圍內無效!
[a-zA-Z] 字符範圍,範圍的字符集{a-z | A-Z}
\s 空格,\t \f \r \n \v和空格
\S 非空白
\w 字母數字,[a-zA-Z0-9_]
\W 非字母數字
\d 位數字,[0-9]
\D 非數字
. Dot, matches any character
^ Start anchor, matches beginning of string
$ End anchor, matches end of string
* Asterisk, match zero or more (greedy)
+ Plus, match one or more (greedy)
? Question, match zero or one (non-greedy)
[abc] Character class, match if one of {‘a’, ‘b’, ‘c’}
[^abc] Inverted class, match if NOT one of {‘a’, ‘b’, ‘c’} NOTE: This feature is currently broken for some usage of character ranges!
[a-zA-Z] Character ranges, the character set of the ranges { a-z | A-Z }
\s Whitespace, \t \f \r \n \v and spaces
\S Non-whitespace
\w Alphanumeric, [a-zA-Z0-9_]
\W Non-alphanumeric
\d Digits, [0-9]
\D Non-digits