[C#/JavaScript] Replace方法取代字串

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);

執行結果: