JavaScript v.s C# Replace string
前言
在C#裡的字串.Replace(oldValue,newValue)方法,會把字串裡所有符合oldValue的值全部取代成newValue
例如:
string result = "Jack and JACK or Jack";
result = result.Replace("Jack", "Marry");
結果,兩個Jack字串被取代成Marry
但如果用相同思維使用在JavaScript的replace方法就會出問題,例如
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>JS replace Demo</title>
</head>
<body>
<!--引用jQuery核心-->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script type="text/javascript">
$(function () {
let result = "Jack and JACK or Jack";
result = result.replace("Jack", "Marry");
console.log(result);
});
</script>
</body>
</html>
結果只有第一個"Jack"字串被取代成Marry
實作
要把JavaScript的replace方法當做C#那樣,把全部符合的字串都替代掉的話,其實replace方法要搭配正則運算式使用,如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>JS replace Demo</title>
</head>
<body>
<!--引用jQuery核心-->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script type="text/javascript">
$(function () {
let result = "Jack and JACK or Jack";
//第1種寫法
let a = result.replace(/Jack/g, "Marry");
//第2種寫法
let b = result.replace(new RegExp("Jack", "g"), "Marry");
console.log("第1種寫法:" + a);
console.log("第2種寫法:" + b);
});
</script>
</body>
</html>
↑以上會看到一個參數g,表示全域,要搜尋所有符合的字串
執行結果就會如同C#的Replace()方法一樣
在JavaScript取代英文字串的話,其實還有一個參數i可以傳遞,表示忽略大小寫,如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>JS replace Demo</title>
</head>
<body>
<!--引用jQuery核心-->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script type="text/javascript">
$(function () {
let result = "Jack and JACK or Jack";
//第1種寫法
let a = result.replace(/Jack/ig, "Marry"); //填ig或gi順序對調都可以
//第2種寫法
let b = result.replace(new RegExp("Jack", "ig"), "Marry"); //填ig或gi順序對調都可以
console.log("第1種寫法:" + a);
console.log("第2種寫法:" + b);
});
</script>
</body>
</html>
執行結果↓只要是Jack字串不管大小寫都會被取代成Marry
由於C#字串的Replace方法有區分英文大小寫,如果不想區分大小寫的話,得改用以下Regex寫法
//先引用using System.Text.RegularExpressions命名空間
string input = "Jack and JACK or Jack";
string result = Regex.Replace(input, "Jack", "Marry", RegexOptions.IgnoreCase);//忽略大小寫
return Content(result);
執行結果: