正則表達式的整理(將金錢數變成帶有千分位)


 //價格千分位格式化
 function formatNum(num){
     return (num.toFixed(2) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
 }
password =E10ADC3949BA59ABBE56E057F20F883E

'12345678901'.replace(/(\d{3})\d{4}(\d{4})/,'$1****$2')
password = password.replace(/.{2}(?=(.{2}))/g, '$&-');
//password =E1-0A-DC-39-49-BA-59-AB-BE-56-E0-57-F2-0F-88-3E
 
$1、$2、...、$99 與 regexp 中的第 1 到第 99 個子表達式相匹配的文本。
$& 與 regexp 相匹配的子串。
$` 位於匹配子串左側的文本。
$' 位於匹配子串右側的文本。
$$ 直接量符號。
元字符
描述
\
將下一個字符標記符、或一個向后引用、或一個八進制轉義符。例如,“\\n”匹配\n。“\n”匹配換行符。序列“\\”匹配“\”而“\(”則匹配“(”。即相當於多種編程語言中都有的“轉義字符”的概念。
^
匹配輸入字行首。如果設置了RegExp對象的Multiline屬性,^也匹配“\n”或“\r”之后的位置。
$
匹配輸入行尾。如果設置了RegExp對象的Multiline屬性,$也匹配“\n”或“\r”之前的位置。
*
匹配前面的子表達式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等價於{0,}。
+
匹配前面的子表達式一次或多次(大於等於1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。
?
匹配前面的子表達式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等價於{0,1}。
字符類別(Character Classes)
字符 含義
.

(點號,小數點) 匹配任意單個字符,但是行結束符除外:\n \r \u2028 或 \u2029

在字符集中,點( . )失去其特殊含義,並匹配一個字面點( . )。

需要注意的是,m 多行(multiline)標志不會改變點號的表現。因此為了匹配多行中的字符集,可使用[^] (當然你不是打算用在舊版本 IE 中),它將會匹配任意字符,包括換行符。

例如,/.y/ 匹配 "yes make my day" 中的 "my" 和 "ay",但是不匹配 "yes"。

\d

匹配任意阿拉伯數字。等價於[0-9]

例如,/\d/ 或 /[0-9]/ 匹配 "B2 is the suite number." 中的 '2'。 

\D

匹配任意一個不是阿拉伯數字的字符。等價於[^0-9]

例如,/\D/ 或 /[^0-9]/ 匹配 "B2 is the suite number." 中的 'B'。

\w

匹配任意來自基本拉丁字母表中的字母數字字符,還包括下划線。等價於 [A-Za-z0-9_]

例如,/\w/ 匹配 "apple" 中的 'a',"$5.28" 中的 '5' 和 "3D" 中的 '3'。

\W

匹配任意不是基本拉丁字母表中單詞(字母數字下划線)字符的字符。等價於 [^A-Za-z0-9_]

例如,/\W/ 或 /[^A-Za-z0-9_]/ 匹配 "50%" 中的 '%'。

\s

匹配一個空白符,包括空格、制表符、換頁符、換行符和其他 Unicode 空格。

等價於 [ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​ \u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​​\u202f\u205f​ \u3000]。

例如 /\s\w*/ 匹配 "foo bar" 中的 ' bar'。

\S

匹配一個非空白符。等價於 [^ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​ \u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​\u202f\u205f​\u3000]

例如,/\S\w*/ 匹配 "foo bar" 中的 'foo'。

\t 匹配一個水平制表符(tab)
\r 匹配一個回車符(carriage return)
\n 匹配一個換行符(linefeed)
\v 匹配一個垂直制表符(vertical tab)
\f 匹配一個換頁符(form-feed)
[\b] 匹配一個退格符(backspace)(不要與 \b 混淆)
\0 匹配一個 NUL 字符。不要在此后面跟小數點。
\cX

X 是 A - Z 的一個字母。匹配字符串中的一個控制字符。

例如,/\cM/ 匹配字符串中的 control-M。

\xhh 匹配編碼為 hh (兩個十六進制數字)的字符。
\uhhhh 匹配 Unicode 值為 hhhh (四個十六進制數字)的字符。
\

對於那些通常被認為字面意義的字符來說,表示下一個字符具有特殊用處,並且不會被按照字面意義解釋。

例如 /b/ 匹配字符 'b'。在 b 前面加上一個反斜杠,即使用 /\b/,則該字符變得特殊,以為這匹配一個單詞邊界。

對於那些通常特殊對待的字符,表示下一個字符不具有特殊用途,會被按照字面意義解釋。

例如,* 是一個特殊字符,表示匹配某個字符 0 或多次,如 /a*/ 意味着 0 或多個 "a"。 為了匹配字面意義上的 * ,在它前面加上一個反斜杠,例如,/a\*/匹配 'a*'。

字符集合(Character Sets)
字符 含義
[xyz]

一個字符集合,也叫字符組。匹配集合中的任意一個字符。你可以使用連字符'-'指定一個范圍。

例如,[abcd] 等價於 [a-d],匹配"brisket"中的'b'和"chop"中的'c'。

[^xyz]

一個反義或補充字符集,也叫反義字符組。也就是說,它匹配任意不在括號內的字符。你也可以通過使用連字符 '-' 指定一個范圍內的字符。

例如,[^abc] 等價於 [^a-c]。 第一個匹配的是 "bacon" 中的'o' 和 "chop" 中的 'h'。

邊界(Boundaries)
字符 含義
^

匹配輸入開始。如果多行(multiline)標志被設為 true,該字符也會匹配一個斷行(line break)符后的開始處。

例如,/^A/ 不匹配 "an A" 中的 "A",但匹配 "An A" 中的 "A"。

$

匹配輸入結尾。如果多行(multiline)標志被設為 true,該字符也會匹配一個斷行(line break)符的前的結尾處。

例如,/t$/ 不匹配 "eater" 中的 "t",但匹配 "eat" 中的 "t"。

\b

匹配一個零寬單詞邊界(zero-width word boundary),如一個字母與一個空格之間。 (不要和 [\b] 混淆)

例如,/\bno/ 匹配 "at noon" 中的 "no",/ly\b/ 匹配 "possibly yesterday." 中的 "ly"。

\B

匹配一個零寬非單詞邊界(zero-width non-word boundary),如兩個字母之間或兩個空格之間。

例如,/\Bon/ 匹配 "at noon" 中的 "on",/ye\B/ 匹配 "possibly yesterday." 中的 "ye"。

分組(Grouping)與反向引用(back references)
字符 含義
(x)

匹配 x 並且捕獲匹配項。 這被稱為捕獲括號(capturing parentheses)。

例如,/(foo)/ 匹配且捕獲 "foo bar." 中的 "foo"。被匹配的子字符串可以在結果數組的元素 [1], ..., [n] 中找到,或在被定義的 RegExp 對象的屬性 $1, ..., $9 中找到。

捕獲組(Capturing groups)有性能懲罰。如果不需再次訪問被匹配的子字符串,最好使用非捕獲括號(non-capturing parentheses),見下面。

\n

n 是一個正整數。一個反向引用(back reference),指向正則表達式中第 n 個括號(從左開始數)中匹配的子字符串。

例如,/apple(,)\sorange\1/ 匹配 "apple, orange, cherry, peach." 中的 "apple,orange,"。一個更全面的例子在該表格下面。

(?:x) 匹配 x 不會捕獲匹配項。這被稱為非捕獲括號(non-capturing parentheses)。匹配項不能夠從結果數組的元素 [1], ..., [n] 或已被定義的 RegExp 對象的屬性 $1, ..., $9 再次訪問到。
數量詞(Quantifiers)
字符 含義
x*

匹配前面的模式 x 0 或多次。

例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。

x+

匹配前面的模式 x 1 或多次。等價於 {1,}

例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。

x*?
x+?

像上面的 * 和 + 一樣匹配前面的模式 x,然而匹配是最小可能匹配。

例如,/".*?"/ 匹配 '"foo" "bar"' 中的 '"foo"',而 * 后面沒有 ? 時匹配 '"foo" "bar"'。

x?

匹配前面的模式 x 0 或 1 次。

例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。

如果在數量詞 *+? 或 {}, 任意一個后面緊跟該符號(?),會使數量詞變為非貪婪( non-greedy) ,即匹配次數最小化。反之,默認情況下,是貪婪的(greedy),即匹配次數最大化。

在使用於向前斷言(lookahead assertions)時,見該表格中 (?=)、(?!) 和 (?:) 的說明。

x(?=y) 只有當 x 后面緊跟着 y 時,才匹配 x。 例如,/Jack(?=Sprat)/ 只有在 'Jack' 后面緊跟着 'Sprat' 時,才會匹配它。/Jack(?=Sprat|Frost)/ 只有在 'Jack' 后面緊跟着 'Sprat' 或 'Frost' 時,才會匹配它。然而,'Sprat' 或 'Frost' 都不是匹配結果的一部分。
x(?!y)

只有當 x 后面不是緊跟着 y 時,才匹配 x。例如,/\d+(?!\.)/ 只有當一個數字后面沒有緊跟着一個小數點時,才會匹配該數字。

/\d+(?!\.)/.exec("3.141") 匹配 141 而不是 3.141。

x|y

匹配 x 或 y

例如,/green|red/ 匹配 "green apple" 中的 ‘green',"red apple." 中的 'red'。

x{n}

n 是一個正整數。前面的模式 x 連續出現 n 次時匹配。

例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的兩個 "a",且匹配 "caaandy." 中的前兩個 "a"。

x{n,}

n 是一個正整數。前面的模式 x 連續出現至少 n 次時匹配。

例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。

x{n,m}

n 和 m 為正整數。前面的模式 x 連續出現至少 n 次,至多 m 次時匹配。

例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的兩個 "a",匹配 "caaaaaaandy" 中的前面三個 "a"。注意,當匹配 "caaaaaaandy" 時,即使原始字符串擁有更多的 "a",匹配項也是 "aaa"。

斷言(Assertions)
字符 含義
x(?=y)

僅匹配被y跟隨的x。

舉個例子,/Jack(?=Sprat)/,如果"Jack"后面跟着sprat,則匹配之。

/Jack(?=Sprat|Frost)/ ,如果"Jack"后面跟着"Sprat"或者"Frost",則匹配之。但是,"Sprat" 和"Frost" 都不會在匹配結果中出現。

x(?!y)

僅匹配不被y跟隨的x。

舉個例子,/\d+(?!\.)/ 只會匹配不被點(.)跟隨的數字。
/\d+(?!\.)/.exec('3.141') 匹配"141",而不是"3.141"

 

 

Vue.prototype.$fmoney=function(s){
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(2) + "";
var l = s.split(".")[0].split("").reverse(), r = s.split(".")[1];
var t = "";
for (let i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
return t.split("").reverse().join("") + "." + r;
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM