替换两个单词之间的文字

时间:2013-08-22 19:01:09

标签: javascript regex

这个问题在SO中似乎很简单,也很重复。

但请考虑这个字符串:SELECT a, b, c, d FROM。我希望 SELECTFROM之间的内容。

很好,所以我发现this answer提出了这个正则表达式:(?<=SELECT)(.*)(?=FROM)。根据{{​​3}},如果 lookbehind 在JavaScript中运行是完美的:

  

与前瞻不同,JavaScript不支持正则表达式后瞻语法

所以它不起作用(在this post中为JS做的测试)。 regexpal提出了这个正则表达式:SELECT=(.*?)FROM。但它包括这两个词,所以它不符合我的需要。

这样做的目的是在replace函数中使用它来转换...

SELECT a, b, c, d FROM

进入这个...

SELECT Count(*) FROM

提前谢谢。

5 个答案:

答案 0 :(得分:3)

只需使用捕获组:

"SELECT a, b, c, d FROM".replace(/(SELECT)(.+?)(?= FROM)/, "$1 count(*)")

答案 1 :(得分: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)
});

工作JSFIDDLE: - http://jsfiddle.net/tkP74/1597/

答案 2 :(得分:1)

好吧,你可以像我在评论中所说的那样放回SELECT

str.replace(/SELECT (.*?)(?= FROM)/i, "SELECT Count(*)");

答案 3 :(得分:1)

正如此特定字符串的正则表达式的替代方法:

str = 'SELECT COUNT(*) ' + str.substr(str.indexOf('FROM'));

答案 4 :(得分:1)

Without regex

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