Sfjklm Ответов: 5

Как реверсировать только intiger в полной строке в javascript?


так что у меня есть
Input : “Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198”

и нужно получить это -
Output : “Dlasdf432dkl sdfkl6888adaf51adfjk7 asdflkj166673a s544s891”


как вы видите, только числа перевернуты, и я не знаю, как изолировать числа от него и перевернуть только их, не связывая буквы..наверное, легко, но мой js немного заржавел, я не могу найти решение в Интернете...я нашел только для intiger, но не вместе..

Что я уже пробовал:

<script>
	function myfunction(a){
   var x=a.toString();
   var y= x.split(" ");
   var z=y.reverse();
   var result=z.join("");
     return result;
}

 myfunction( “Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198”);


</script>

5 Ответов

Рейтинг:
9

Sfjklm

На самом деле не так уж и сложно:



Строку.прототип.обратный = функция() {
верните это. replace (/[0-9]+ / gm, function(item) {
возвращенный деталь.сплит("").обратный().присоединяйтесь("");
});
}

document.writeln ("Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198". реверс());


Рейтинг:
2

A_Griffin

Вот гораздо более короткая версия - я обходил дома наверху без необходимости....

<html>
  <head>
    <script type="text/javascript">
        function isNumeric(n) {
            return !isNaN(parseInt(n)) && isFinite(n);
        }
        function solveMe() {
            var sOut = ''   // string to hold final answer
            var sIn = document.getElementById("tIN").value;
            if (sIn.length > 0) {
                var i = 0;
                var k; 
                var t;
                i = 0;
                while (i < sIn.length) {
                    if (isNumeric(sIn.charAt(i))) {
                        // if char is a number, first make a temp string of it and any successive numbers
                        k = i;
                        t = '';
                        while ((k < sIn.length) && (isNumeric(sIn.charAt(k)))) {
                            t += sIn.charAt(k);
                            k++;
                            i++;  // remember to increment i as well!
                        }
                        i--;  // and decrement by 1 at the end becasue we'll increment it again at end of while koop
                        // now add the characters in the temp string in reverse order to the answer string
                        k = t.length - 1;
                        while (k > -1) {
                            sOut += t.charAt(k);
                            k--
                        }                      
                    } else {
                        // add to opposite arrays if it's not numeric
                        sOut += sIn.charAt(i);
                    }
                    i++;
                }
            }
            document.getElementById("dX").innerHTML = sOut;
        }
    </script>
  </head>
  <body>
   <p><input type="text" id="tIN" style="width:500px" value="Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198" /></p>
      <p><a href="#" onclick="solveMe()">Solve</a></p>
      <div id="dX"></div>
  </body>
</html>


A_Griffin

. и это действительно работает! (Как это делает оригинал...)

Sfjklm

клянусь Богом ... я получаю =
Uncaught ReferenceError: solveMe не определен
в HTMLAnchorElement. onclick (VM87 zadat. html:46)

A_Griffin

Тогда вы делаете что - то еще неправильно-потому что HTMLAnchorElement.onclick (VM87 zadat.html:46) не является частью моего кода, не так ли?

Sfjklm

да, СРИ ...моя беда...

A_Griffin

кстати, только что исправил опечатку в строке
СОУТ += грех.используя метод charat(я);
Раньше у него был дополнительный вход .

Рейтинг:
2

Patrice T

Цитата:
я не могу найти решение в интернете

Просто гуглить в интернете-это не ваша работа, как программиста, ваша работа-создавать алгоритмы.
Алгоритм великих линий таков:
- Сканируйте входные данные на наличие последовательностей цифр
- Для каждой последовательности замените ее на обратную

Чтобы помочь вам анализировать проблемы, вы должны изучить один или несколько методов анализа, У. Е. сверху вниз Djikstra способ это хорошее начало.
https://en.wikipedia.org/wiki/Top-down_and_bottom-up_design[^]
https://en.wikipedia.org/wiki/Structured_programming[^]
https://en.wikipedia.org/wiki/Edsger_W._Dijkstra[^]
https://www.cs.utexas.edu/users/EWD/ewd03xx/EWD316.PDF[^]

Для этой задачи регулярное выражение (Regex) может значительно упростить код. Регулярные выражения используются для сопоставления последовательностей в строках и для выполнения таких действий с совпадениями, как замена их в строке.
JavaScript RegExp Объект[^]
Всего несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & amp; Test RegEx[^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Примечание: этот код слишком сложен:
function myfunction(a){
   var x=a.toString();
   var y= x.split(" ");

вы обращаетесь a к строке, но это уже строка, поэтому этот код можно упростить до:
function myfunction(a){
   var y= a.split(" ");

Здесь
myfunction( "Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198");

вы забыли что-то сделать с результатом моей функции.
result= myfunction( "Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198");


Рейтинг:
1

OriginalGriff

Нет ничего стандартного, что могло бы это сделать.
Вам нужно будет обработать строку, Найти начало и конец целого числа, идентифицируя цифровые и нецифровые символы, а затем поменять местами концы:

start:       123456
first swap:  623451
second swap: 653421
third swap:  654321


Kornfeld Eliyahu Peter

Регулярное выражение может помочь разделить строку и идентифицировать прогоны...

OriginalGriff

Да-но не перевернет их вспять! :смеяться:

Рейтинг:
1

A_Griffin

Мой JavaScript очень хорош ... ГМ, основные.... но в конце концов я получаю удовольствие! :)

Вот простая HTML-страница, которая делает это - без сомнения, те, кто знает об этих вещах, могут сделать это гораздо лучше, но я надеюсь, что это поможет вам что-то узнать...

<html>
  <head>
    <script type="text/javascript">
        function isNumeric(n) {
            return !isNaN(parseInt(n)) && isFinite(n);
        }
        function solveMe() {
            var sOut = ''   // string to hold final answer
            var sIn = document.getElementById("tIN").value;
            if (sIn.length > 0) {
                var n = [''];  // array to holder integers
                var a = [''];  // array to hold other characters
                var i = 0;
                var k; 
                var t;
                i = 0;
                while (i < sIn.length) {
                    if (isNumeric(sIn.charAt(i))) {
                         // if character at position i is numeric add it to array "n" at position i
                         // and a blank string to array "a" at position i
                        n.push(sIn.charAt(i));
                        a.push('');
                    } else {
                        // add to opposite arrays if it's not numeric
                        a.push(sIn.charAt(i));
                        n.push('');
                    }
                    i++;
                }
                i = 1;  // skip first eleemtn of array (it's ewmpty from initialisation))
                while (i < a.length) {
                    if (a[i] == '') {
                        // if element i in array "a" is empty, the correspsonding character in the "n" array will be a number
                        // so, first make a temp string of it and any successive numbers
                        k = i;
                        t = '';
                        while ((k < a.length) && (a[k] == '')) {
                            t += n[k];
                            k++;
                            i++;  // remember to increment i as well!
                        }
                        i--;  // and decrement by 1 at the end becasue we'll increment it again at end of while koop
                        // now add the characters in the temp string in reverse order to the answer string
                        k = t.length-1;
                        while (k > -1) {
                            sOut += t.charAt(k);
                            k--
                        }
                    } else {
                        // if element i in array "a" is a non-numeric character, simply add it to the answer string
                        sOut += a[i];
                    }
                    i++;
                }
            }
            document.getElementById("dX").innerHTML = sOut;
        }
    </script>
  </head>
  <body>
   <p><input type="text" id="tIN" style="width:500px" value="Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198" /></p>
      <p><a href="#" onclick="solveMe()">Solve</a></p>
      <div id="dX"></div>
  </body>
</html>


A_Griffin

PS-NB я воздержался даже от вопроса, почему вы когда-либо хотели сделать такую вещь......

Sfjklm

Этот код не работает..

A_Griffin

Ну, это копия / вставка точно со страницы, которая работала на меня. Что не так, когда вы пытаетесь это сделать?

Sfjklm

Uncaught SyntaxError: неожиданный токен <
Uncaught ReferenceError: solveMe не определен
в HTMLAnchorElement. onclick (zadat. html:62)

A_Griffin

Ну, тогда вы не копировали/вставляли прямо сейчас - потому что вы сами видите, что solveMe определена. Попробуйте скопировать / вставить весь мой код целиком, сохранить его как есть в виде HTML-файла и запустить. Затем позаботьтесь о переносе его в свой код.

Sfjklm

чувак, твой код такой большой...у меня есть что-то вроде этого



ВАР str1 выглядит следующим образом="Dlasdf234dkl sdfkl8886adaf15adfjk7 asdflkj376661a s445s198";
var str2="";
var str3="";
для(ВАР х=0; х&ЛТ;str1 выглядит следующим образом.длина;х++)
{
если(str1 выглядит следующим образом.используя метод charat(х)&ГТ;=0 &&усилителя; str1 выглядит следующим образом.используя метод charat(х)&ЛТ;=9)
{
строка str2+=str1 выглядит следующим образом.используя метод charat(х)
}}
стр3=стр2.сплит(").обратный().присоединяйтесь к(")
консоли.журнал(стр3);


но это не работает...я получаю только "891544 166673 7516888 432" на моем выходе

Sfjklm

это похоже на то, что мне нужно разделить каждую строку в строке пробелом, а затем перевернуть только числа...это трудно для меня я знаю только php