这个问题在SO中似乎很简单,也很重复。
但请考虑这个字符串:SELECT a, b, c, d FROM
。我希望仅 SELECT
和FROM
之间的内容。
很好,所以我发现this answer提出了这个正则表达式:(?<=SELECT)(.*)(?=FROM)
。根据{{3}},如果 lookbehind 在JavaScript中运行是完美的:
与前瞻不同,JavaScript不支持正则表达式后瞻语法
所以它不起作用(在this post中为JS做的测试)。 regexpal提出了这个正则表达式:SELECT=(.*?)FROM
。但它包括这两个词,所以它不符合我的需要。
这样做的目的是在replace
函数中使用它来转换...
SELECT a, b, c, d FROM
进入这个...
SELECT Count(*) FROM
提前谢谢。
答案 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)
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);
}