Обработка нескольких строк с использованием js

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

У меня есть текстовая область, в которую я буду вставлять некоторые данные, например, вот так

 01-06-2019 <!-- mm-dd-yyyy -->
01-07-2019
01-08-2019
01-09-2019
01-10-2019
  

И когда я нажимаю отправить весь текст внутри текстового поля, чтобы выдать вывод ниже примерно такого

 06/01/2019 <!-- dd/mm/yyyy -->
07/01/2019
08/01/2019
08/01/2019
10/01/2019
  

Я справился с этим на python, используя этот код

 filepath = ('date.txt')
f = open("newdate.txt", "w ")
new = []
with open(filepath) as fp:
    for line in fp:
        line = line.strip('n')
        new = line.split("-")
        f.write(new[1]   "/"   new[2]   "/"   new[0]   "n")
        print(new[1]   "/"   new[2]   "/"   new[0]   "n")
f.close()
  

Я новичок в JavaScript и jQuery, поэтому мне интересно, как я могу добиться этого в jQuery

Комментарии:

1. вы бы не стали использовать jquery, поскольку в нем нет функций обработки строк, кроме тех, которые доступны в javascript … кроме того, в javascript вы не можете открыть файл и т.д., Поэтому вам нужно подумать, как вы можете получить содержимое текстовой области … подсказка: это value то, что вы хотите — тогда все, что вам нужно сделать, это изучить некоторые базовые javascript, чтобы попытаться написать код

2. Вы можете принять один ответ (если это вам поможет), нажав на большую серую кнопку проверки с левой стороны. При желании вы можете добавить 10 баллов любому автору любого хорошего ответа, щелкнув верхний серый треугольник

Ответ №1:

Вы можете зарегистрировать onsubmit прослушиватель в своей форме, а затем в обработчике выполнить вашу логику синтаксического анализа значения текстовой области.

Следующий фрагмент является примером того, как это сделать:

 // Register 'submit' event listener
document.querySelector('#form')
  .addEventListener('submit', e => {
    // Prevent default action so that page doesn't refresh
    e.preventDefault();

    // Get the text from the textarea
    let text = document.querySelector('#text').value;

    // Split the lines
    let converted = text.split('n')
      // Convert each line
      .map(str => {
        // Extract the date parts
        let [mm, dd, yyyy] = str.split('-');
        
        // Return the desired format by joining the date parts with /
        return [dd, mm, yyyy].join('/');
      });

    // Print result to console
    console.log(converted);
  });  
 <form id="form">
  <textarea id="text"></textarea>
  <button type="submit">submit</button>
</form>  

Ответ №2:

используйте следующее регулярное выражение-замените значение textarea

 value.replace(/(-)(?=d)/g,'/')
  

(-)(?=d) Найдет все тире ‘-‘, предшествующие числу

 function submit() {
  let r=data.value.replace(/(-)(?=d)/g,'/');
  console.log(r);
}  
 textarea { width: 200px; height: 100px; }
button { display: block }  
 <textarea id="data">
01-06-2019 <!-- mm-dd-yyyy -->
01-07-2019
01-08-2019
01-09-2019
01-10-2019
</textarea>

<button onclick=submit()>Submit</button>  

Ответ №3:

На самом деле вам не нужен никакой jQuery для этого, должно сработать лишь небольшое регулярное выражение.

 const datesArr = [
  '01-06-2019',
  '01-07-2019',
  '01-08-2019',
  '01-09-2019',
  '01-10-2019',
]
const newDates = []
const regex = /(dd)-(dd)-(d{4})/

for (let date of datesArr) {
    newDates.push(date.replace(regex, '$2/$1/$3'))
}

console.log(newDates)  

Ответ №4:

 function convertToFormat(data) {
    var _dataSplit = data.split('rn');
    var _length = _dataSplit.length;

    var _finalData = '';

    for (var i=0;i<_length;i  ) {
        var _dataDSplit = _dataSplit[i].split('-');
        _finalData  = _dataDSplit[1] '/' _dataDSplit[0] '/' _dataDSplit[2] 'rn';
    }

    return _finalData;
}
  

Ответ №5:

Вы можете получить значение текстовой области, нажав отправить, как показано в приведенном ниже фрагменте. Вы можете выполнять свои манипуляции с датой (изучите некоторые манипуляции со строками для форматирования. См. — https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String )

 function formatText() {
  var textAreaValue = $('#my-text').val();
  // Do the necessary formatting here
  var formattedText = 'test';
  $('#my-text').val(formattedText);
}  
 .btn {
  display: block;
  width: 100px;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <textarea id="my-text"></textarea>
  <button class="btn" onClick="formatText()">Submit</button>
</div>  

Ответ №6:

Попробуйте использовать замену регулярных выражений. Демонстрация регулярных выражений здесь

 let dates = document.getElementById('dates');

console.log(dates.value.replace(/(d{2})-(d{2})-(d{4})/g, '$2/$1/$3'))  
 <textarea id="dates" rows="6" cols="30">
01-06-2019 <!-- mm-dd-yyyy -->
01-07-2019
01-08-2019
01-09-2019
01-10-2019
</textarea>