jQuery字符串替换匹配的正则表达式
jQuery string replace matched regex
我试图通过用字符串替换每个单元格中的数据来格式化表的整个列。简单地说,如果我在输入字段中输入"nargles"并单击表格列顶部的格式按钮,该列中每个单元格中的文本都将被替换为"nargles"。
我的问题涉及用表值替换输入字符串中的"%0","%1","%2"等实例。%0对应第0列,%1对应第1列,%2对应第2列,依此类推。此外,它必须获取正在修改的当前行的列值。
让我们用一个例子来说明:
1 cat description
2 dog description
3 fish description
如果我输入"Row %0 is for %1"作为我的输入,并在第三列上执行它,结果将是:
1 cat Row 1 is for cat
2 dog Row 2 is for dog
3 fish Row 3 is for fish
希望这是一个充分的解释=)
那么,下面是示例表中的示例:
<tr>
<td></td>
<td><button class="format" col="1">Format Col</button></td>
<td><button class="format" col="2" >Format Col</button></td>
</tr>
<tr>
<td><input type="text" col="0" row="0" value="0" size="1"></td>
<td><input type="text" col="1" row="0" value="cat" /></td>
<td><input type="text" col="2" row="0" value="description" /></td>
</tr>
...
,这里是每个列顶部的格式按钮的代码
$('td button.format').on('click', function () {
// get formatter variables and column number
string = $("#formatter").attr("value");
column = $(this).attr("col");
// regex to globally look for %d (where d is an integer)
var re = new RegExp("'%(''d+)", "g");
$('td input[col="' + column + '"]').each(function (row) {
// replace string here
});
});
目前,这个代码结构将捕获第一列的值并且工作良好
$('td input[col="' + column + '"]').each(function (i) {
$(this).attr("value", string.replace(re, $('td input[col="1" row="' + i +'"]').attr('value')));
});
但是这样做(输入"%2")将导致"undefined 2"。(我用col="'$1"
替换了上面的col="1"
,并附加了"'$1"来使用找到的第一个匹配的正则表达式)。我还应该注意到,除了"'$1"之外,我还使用了"$1"answers"'$1",但运气不好。
$('td input[col="' + column + '"]').each(function (i) {
$(this).attr("value", string.replace(re, $('td input[col="'$1" row="' + i +'"]').attr('value') + " '$1"));
});
我的结论是,将regex匹配替换为jquery查找的时间和执行查找的时间是不正确的。由于结果是"未定义2",我知道正则表达式是匹配的,但查找是不正确的。然而,我知道代码一般是正确的,因为硬编码col="2"
将工作。
你知道为什么这个会遇到麻烦吗?我想说这是一个语法问题,但也许我错了。
旁注:如果我只使用re.match()
函数并在返回的数组上迭代,这一切都可以避免。我知道有一个解决方案,我只是想看看是否有一个更优雅/更干净的方法。
我知道这很长,对不起!我觉得信息多一点总比不够好。感谢您从头到尾的阅读!
我猜你在找这样的东西:
$('td button.format').click(function () {
var template = "Row %0 is for %1";
var col = $(this).attr("col");
$("#body tr").each(function() {
var $row = $(this);
var t = template.replace(/%('d+)/g, function($0, $1) {
return $row.find("td:eq(" + $1 + ") input").val();
});
$row.find("td:eq(" + col + ") input").val(t)
})
})
完整的示例:http://jsfiddle.net/TTjtU/
- 将电子邮件验证正则表达式字符串存储在JSON中
- 带有模式的正则表达式字符串
- Javascript if数组包含正则表达式字符串
- 在JSON中指定正则表达式字符串,在JavaScript和PHP中使用
- 从正则表达式文本中获取正则表达式字符串表示的最佳方式
- 正则表达式 - 字符串不能以空格开头,以空格结尾,并且连续包含几个空格
- 正则表达式 - 字符串不应包含超过 7 位数字
- 在 javascript 中将正则表达式字符串转换为正则表达式不同
- Javascript:测试单个字符在正则表达式字符串中找到
- 正则表达式(字符串比较)
- 是否可以生成与正则表达式字符串匹配的字符串
- 正则表达式字符串匹配
- 正则表达式字符串比较忽略符号
- 是否可以使用正则表达式解析正则表达式字符串
- 正则表达式字符串在文档中替换为 JavaScript
- 如何使正则表达式字符串拒绝空白字段
- 拆分正则表达式字符串
- 表示正则表达式字符串表示法
- 将HTML标记添加到此正则表达式字符串中
- 将正则表达式字符串转换为javascript中的正则表达式对象