Reputation: 25959
In AS3 you have a function on a string with this signature:
function replace(pattern:*, repl:Object):String
The repl:Object can also specify a function. If you specify a function, the string returned by the function is inserted in place of the matching content.
Also, is it possible to get the the original string in which I want to replace things?
(In AS3 you can get the original string by
var input:String = arguments[2]; //in the callback function
)
I don't see a property in the Match
class containing the original string...
Upvotes: 10
Views: 5007
Reputation: 1500805
Just as an example to make the existing answers absolutely concrete, and showing how lambda expressions can be handy:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
var template = "On $today$ you need to do something.";
var regex = new Regex(@"\$today\$");
var text = regex.Replace(template,
match => DateTime.Now.ToString("d"));
Console.WriteLine(text);
}
}
(Marc's answer appeared while I was writing this, but I'll leave it up as a complete example unless anyone thinks it's just redundant. I'm happy to delete it if suggested.)
Upvotes: 5
Reputation: 1062905
static void Main() {
string s1 = Regex.Replace("abcdefghik", "e",
match => "*I'm a callback*");
string s2 = Regex.Replace("abcdefghik", "c", Callback);
}
static string Callback(Match match) {
return "*and so am i*";
}
Note you have access to the matched data via the argument (and match.Value
in particular, unless you want access to the regex groups (.Groups
) etc).
Upvotes: 13
Reputation: 545618
In order to do this in C#, use System.Text.RegularExpressions.Regex.Replace()
which takes a callback.
Upvotes: 6