簡體   English   中英

正則表達式:將Pattern中的String替換為函數的返回值

[英]Regex: Replace String inside Pattern for Return Value of Function

輸入: "some random text [[specialthing]] blah blah"

輸出: "some random text ANOTHERTEXT blah blah"


目標:

myFunction('specialthing');替換[[specialthing]] myFunction('specialthing'); 將返回。

我已經有了一個沒有正則表達式的功能,但我想知道是否會有更簡單/更好的方法來做到這一點。

我的代碼:

    data = "some random text [[specialthing]] blah blah";
    for(var i = 0 ; i < data.length ; i++){
        if(data[i] == '[' && data[i+1] == '['){
            var start = i;
            for(var j = start; j < data.length ; j++){
                if(data[j] == ']' && data[j+1] == ']'){
                    var strInBracket = data.slice(start+2,j);
                    var newStr = myFunction(strInBracket);
                    data = data.replace('\[\[' + strInBracket + '\]\]',newStr);
                }
            }
        }
    }

解:

    data = "some random text [[specialthing]] blah blah";

    var strInBracket = data.match(/([^\[]*)(..[^\]]*..)(.*)/)[2];
    var newStr = myFunction(strInBracket.slice(2,-2));
    data = data.replace(strInBracket,newStr);

我正在使用javascript。

解決方案不需要是正則表達式。

您可以將以下正則表達式匹配為:

([^\\[]*)(..[^\\]]*..)(.*)

然后替換為:

'$1'+myFunction($2)+'$3' //this is pseudocode and not actual code

演示: http//regex101.com/r/iC0pK1

這是你想要的正則表達式的工作javascript版本:

/(.*?)\\[\\[(.*?)\\]\\](.*)/

這里有一個小提琴

在這種情況下,正則表達式或多或少地設計為做你想要的。 編寫邏輯來為你的模式手動替換字符串將是相當多的工作,大量的索引數學和正則表達式使得不必手動執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM