2

この質問は、ここSOでは単純で繰り返しのようです。

しかし、次の文字列を考えてみましょう: SELECT a, b, c, d FROM. との間にあるものだけを取得したい。SELECTFROM

いいので、この正規表現を提案するこの回答(?<=SELECT)(.*)(?=FROM)を見つけました: . この投稿によると、後読みが JavaScript で機能する場合は完璧です。

先読みとは異なり、JavaScript は正規表現の後読み構文をサポートしていません

したがって、機能しません(JS用に作成された正規表現でテストしてください)。この anwserは、この正規表現を提案します: SELECT=(.*?)FROM. しかし、それには2つの単語が含まれているため、私のニーズには合いません.

これの目的は、これreplaceを変換する関数で使用することです...

SELECT a, b, c, d FROM

これに...

SELECT Count(*) FROM

前もって感謝します。

4

5 に答える 5

5

キャプチャ グループを使用するだけです。

"SELECT a, b, c, d FROM".replace(/(SELECT)(.+?)(?= FROM)/, "$1 count(*)")
于 2013-08-22T19:08:56.553 に答える
2

これを試して:-

$("button").click(function() {
var srctext = $("#fixme").text();
console.log("old text: " + srctext);

var newtext = srctext.replace(/(SELECT)(.+?)(?= FROM)/, "$1 count(*)");
console.log("new text: " + newtext);

$("#fixme").text(newtext)
});

WORKING JSFIDDLE:- http://jsfiddle.net/tkP74/1597/

于 2013-08-22T19:07:05.050 に答える
1

この特定の文字列の正規表現の代わりとして:

str = 'SELECT COUNT(*) ' + str.substr(str.indexOf('FROM'));
于 2013-08-22T19:08:02.373 に答える
1

SELECTさて、コメントで言ったように、後ろに置くことができます:

str.replace(/SELECT (.*?)(?= FROM)/i, "SELECT Count(*)");
于 2013-08-22T19:05:23.333 に答える
1

正規表現なし:

var query = "SELECT a, b, c, d FROM";
var iSelect = query.indexOf("SELECT");
var selLen = "SELECT".length;
var iFrom = query.indexOf("FROM");
if (iSelect >= 0 && iFrom >= 0) {
    query = query.replace(query.substring(iSelect + selLen, iFrom), " COUNT(*) ");
    console.log(query);
}
于 2013-08-22T19:13:37.337 に答える