6

RegExp オブジェクトのドキュメントを調べても、必要な処理を行うメソッドが見つからないか、十分に調べていません。

テキストがあるとします:

var text = "§193:And Some Text§";

そして RegExp オブジェクト:

var reg = /§([0-9]+):(.*?)§/;

実行reg.match(text);すると、明らかに次のような配列が得られます。

["§193:And Some Text§","193","And Some Text"]

このプロセスを逆にする方法はありますか?RegExp と同じ数の一致するグループを含む配列を関数に与えると、テキストがどのように見えるかが返されます。

var reg = /§([0-9]+)§(.*?)§/;
var data = ["293","Some New Text"];
var text = reg.rmatch(data);

そしてtext今だろう§293:Some New Text§

コードのプラグイン システムを作成しようとしていますが、その一部では、プラグインから正規表現を取得し、データの抽出、データからの元のテキストの再構成など、いくつかのプロセスでそれを使用する必要があります。

今のところ、元のテキストを返す関数をプラグインに提供させる必要があり、それを作成する方法があることを望んでいたので、正規表現を何らかの方法で再利用する必要はありませんでした。カスタム関数を RegExp クラスでプロトタイプ化し、それを使用することができました。これを行うためのプロセスが既にあることを願っていました。

4

2 に答える 2

2
function rregex(regex, data) {
    var arr = new String(regex).split(/\(.*?\)/);
    if (!(arr instanceof Array) || !(data instanceof Array) ||
        (arr.length != data.length+1)) return false;

    var result = arr[0];
    for(var i=0; i < data.length; i++) {
        result += data[i] + arr[i+1]; 
    }
    return result;
}

var reg = /§([0-9]+):(.*?)§/;
var data = ["293","Some New Text"];

console.log(rregex(reg, data))

結果

/§293:Some New Text§/ 

もちろん、正規表現の機能がキャプチャ グループの外部で使用されている場合、これは基本的に不可能です (どうやら私は自分の人生とは何の関係もありません :) キャプチャ グループの外部で正規表現の機能を使用しなくても、大文字と小文字を区別しない一致を正しい大文字と小文字で再構築するにはどうすればよいでしょうか?

もちろん、上記のコードを改善するためにできることはたくさんあります。

于 2013-06-26T18:47:23.713 に答える