Javascript 用RegExp替换先前替换的字符串中的单词
我有以下代码将字符串添加到数组中:Javascript 用RegExp替换先前替换的字符串中的单词,javascript,jquery,Javascript,Jquery,我有以下代码将字符串添加到数组中: sql = new Array(); query = "SELECT * FROM specimen"; $('#keyword').change(function(){ filter = " MATCH(clinical_history) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(specimen) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(macr
sql = new Array();
query = "SELECT * FROM specimen";
$('#keyword').change(function(){
filter = " MATCH(clinical_history) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(specimen) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(macroscopic) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(microscopic) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(conclusion) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(comment) AGAINST ('_KEYWORD_' IN BOOLEAN MODE)";
sql.push(filter);
});
然后,我将用输入字段的值替换上面字符串中的\u关键字
占位符:
$('#search_container').on('click', '#search_btn', function(){
keyword = $('#keyword_field').val();
var regExp = new RegExp('_KEYWORD_', 'g');
$.each(sql, function(index, value) {
sql[index] = value.replace(regExp, keyword);
if(sql != ''){
query += " WHERE " + sql.join(' AND ');
}
});
现在,它可以正常工作一次,但当输入值替换了\u关键字
占位符时就不行了。我需要做的是确定最后一个输入值,并在替换代码中使用它
有什么办法吗?最后一个输入值在字符串中可能不是唯一的。它很可能与sql查询中的其他单词相同。试图这样做既困难又不能保证100%可靠 我建议您在进行任何替换之前单独保存原始模板字符串,以便始终保留原始模板字符串。然后,每次都可以用相同的方法进行替换。简单,100%可靠 构造这种结构的一种方法是使sql数组的每个元素都是一个具有两个属性的对象,即模板字符串和转换/替换的字符串。那么,你将永远拥有这两者
var sql = [];
$('#keyword').change(function(){
var obj = {};
obj.filter = " MATCH(clinical_history) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(specimen) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(macroscopic) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(microscopic) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(conclusion) AGAINST ('_KEYWORD_' IN BOOLEAN MODE) OR MATCH(comment) AGAINST ('_KEYWORD_' IN BOOLEAN MODE)";
sql.push(obj);
});
$('#search_container').on('click', '#search_btn', function(){
var keyword = $('#keyword_field').val();
var regExp = new RegExp('_KEYWORD_', 'g');
$.each(sql, function(index, value) {
// store the replacement string as the .replaced property
// so the .filter property remains unchanged and can be used
// again in the future
sql[index].replaced = sql[index].filter.replace(regExp, keyword);
});
if (sql.length) {
var q = $.map(sql, function(elem) {
return elem.replaced;
});
query += " WHERE " + q.join(' AND ');
}
});
此外,这可能会导致问题,如果给定的关键字为“MATCH”,则当您再次尝试替换它时,字符串其他部分中的匹配项将得到replacedYep,顺序粘贴错误,现在已在OP中更新。匹配查询中的占位符下划线应且正在更改为相同的值,这正是我想要的。代码从样本中选择*,在样本中[object object]我添加了更多的代码,以使它更清楚我是什么doing@PeterBrowne-您是否100%确定您实现了我建议的代码,然后使用
sql[index]。在需要实际查询的任何位置替换了版本的字符串<代码>[object object]
让我觉得您引用的是一个对象,而不是该对象上的属性。@PeterBrowne-您的其他代码没有正确使用新的数组格式。我更新了代码,将您添加到问题中的新部分包括在内。这里要认识到的重要一点是,sql
是一个对象数组。它不是一个字符串数组。你不能像以前那样只使用.join()
对象数组。是的,最后一点就成功了。非常感谢您的专业知识!