Замена [TD] на <TD>в Javascript - PullRequest
       12

Замена [TD] на <TD>в Javascript

0 голосов
/ 14 февраля 2019

У меня есть возвращаемая строка данных из процесса Oracle, которая выводит [TD] и [/TD] вместо <TD> и </TD> для обозначения html-ячейки таблицы.Мне нужно перевести [TD] в <TD> и [/TD] в <TD> в элементе с идентификатором неизмененного значения, используя Javascript.

Я гуглил и искал здесь, и это самый близкий яУ меня так далеко, ни одна из которых не работает.Любая помощь здесь будет принята с благодарностью.

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 голосов
/ 14 февраля 2019

Вы также можете проверить замену с помощью regExp Wiktor Stribiżew

if(str.indexOf('[TD]')!==-1 || str.indexOf('[/TD]')!==-1){str = str.replace(/\[(\/?TD)]/gi, '<$1>')}
0 голосов
/ 14 февраля 2019

Если ваш 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>
0 голосов
/ 14 февраля 2019

Как насчет этого с 2 str.replace() только для скобок?

var str = 'John [TD] Smith [/TD]';
var newstr = str.replace(/\[/gi, '<').replace(/]/gi,'>');
console.log(newstr);
0 голосов
/ 14 февраля 2019

Вы можете использовать

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

Регулярное выражение /\[(\/?TD)]/gi соответствует

  • \[ - [
  • (\/?TD) - группа 1: / 1 или 0 раз, а затем TD
  • ] - ] char
  • /gi - многократные вхождения, без учета регистра.

Если в * 1029 могут быть атрибуты, используйте

// 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>') );
0 голосов
/ 14 февраля 2019

Общее решение для любого тега, а не только [TD]:

console.log(
  'Lorem [TD FOO="ipsum"] dolor sit [/TD] amet'
  .replace(/\[([^\]]+)\]/g, '<$1>')
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...