用Javascript替换[TD]

时间:2019-02-14 16:07:33

标签: javascript html regex replace

我有一个来自Oracle进程的返回数据字符串,该字符串输出[TD][/TD]而不是<TD></TD>来表示html表单元。我需要使用Javascript将[TD]转换为<TD>并将[/TD]转换为<TD>的元素,该元素具有ID不变的值。

我已经在这里搜索了Google,并进行了搜索,这是到目前为止我所获得的最接近的信息,但都不起作用。非常感谢您在这里获得任何帮助。

function strReplace() {
    var string = document.getElementById('unchangedValues').innerHTML;
    var res1 = string.replace(/(\[)|(\])/g, function(match, p1, p2) {
  if (p1) return "<";
  if (p2) return ">"
});
}

而且我也尝试过:

function substituteValues() {

  const str = document.getElementById('unchangedValues').innerHTML;
  const res1 = str.replace(/\[TD\]/g, '\<TD\>');

  document.getElementById('unchangedValues').innerHTML = res1;
}

谢谢

5 个答案:

答案 0 :(得分:2)

您可以使用

console.log(
   "[TD] and [/TD]".replace(/\[(\/?TD)]/gi, '<$1>')
)

/\[(\/?TD)]/gi正则表达式匹配

  • \[-一个[
  • (\/?TD)-组1:/ 1或0次,然后TD
  • ]-一个]字符
  • /gi-多次出现,不区分大小写。

如果TD中可能有属性,请使用

// Assuming values can't contain ] and " are value qualifiers
console.log( '[TD key="value"] and [/TD]'.replace(/\[(\/?TD(?:\s[^\]]*)?)]/gi, '<$1>') );
// Assuming values can contain ] and " or ' are value qualifiers
console.log( '[TD key="va[l]ue here" key2=\'value 2\' auto ] and [/TD]'.replace(/\[(\/?TD(?:\s+\w+(?:=(?:"[^"]*"|'[^']*'|\w+))?)*)\s*]/gi, '<$1>') );

答案 1 :(得分:0)

适用于所有标签的通用解决方案,不仅限于[TD]

console.log(
  'Lorem [TD FOO="ipsum"] dolor sit [/TD] amet'
  .replace(/\[([^\]]+)\]/g, '<$1>')
);

答案 2 :(得分:0)

那只用2个str.replace()放在方括号中呢?

var str = 'John [TD] Smith [/TD]';
var newstr = str.replace(/\[/gi, '<').replace(/]/gi,'>');
console.log(newstr);

答案 3 :(得分:0)

如果您的id位于table元素上,甚至位于tr元素上,并且格式不正确(我不知道,因为您没有发布HTML) ,浏览器会将无效内容移到表格(或最接近的有效位置)之外。您可以看到运行时,tr中没有数据,这使您的代码尝试格式化空字符串,然后将其保存。

console.log(document.getElementById('unchangedValues').innerHTML)
<table id="unchangedValues">
  <tr>
    [TD]Hi[/TD]
    [TD]Hi[/TD]
    [TD]Hi[/TD]
    [TD]Hi[/TD]
  </tr>
</table>

从输出中可以看到,[TD][/TD]都已从表中删除,但是,如果您检查输出,则值将被移动到表的上方或下方由浏览器自动完成。

要解决此问题,您需要将这些项目保存在内存中。然后,您可以修改项目,然后将它们保存到表中。

let str = `[TD]Hi[/TD] 
    [TD]Hi[/TD] 
    [TD]Hi[/TD] 
    [TD]Hi[/TD]`
    
document.querySelector('#unchangedValues tr').innerHTML = str.replace(/\[(\/?TD)\]/g, '<$1>')
<table id="unchangedValues">
  <tr>
  </tr>
</table>

答案 4 :(得分:0)

您还可以使用Wiktor Stribiżew的regExp检查替换项。

if(str.indexOf('[TD]')!==-1 || str.indexOf('[/TD]')!==-1){str = str.replace(/\[(\/?TD)]/gi, '<$1>')}