[JS] Strings -Всички задачи (All tasks)


30

 

1.Write a JavaScript function reverses string and returns it
Example: "sample" à "elpmas".
 
2.Write a JavaScript function to check if in a given expression the brackets are put correctly.Example of correct expression: ((a+b)/5-d).Example of incorrect expression: )(a+b)).

Demo

Source

3.Write a JavaScript function that finds how many times a substring is contained in a given text (perform case insensitive search).

Demo

Source

4.You are given a text. Write a function that changes the text in all regions:

­<upcase>text</upcase> to uppercase.
­<lowcase>text</lowcase> to lowercase
­<mixcase>text</mixcase> to mix casing(random)
5.Write a function that replaces non breaking white-spaces in a text with &nbsp;
6.Write a function that extracts the content of a html page given as text. The function should return anything that is in a tag, without the tags:
Demo
7.Write a script that parses an URL address given in the format:

[protocol]://[server]/[resource]

and extracts from it the [protocol], [server] and [resource] elements. Return the elements in a JSON object.
For example from the URL http://www.devbg.org/forum/index.php the following information should be extracted:

Demo

Source

8.Write a JavaScript function that replaces in a HTML document given as string all the tags <a href="…">…</a> with corresponding tags [URL=…]…/URL]. Sample HTML fragment:

Demo

Source

9.Write a function for extracting all email addresses from given text. All substrings that match the format <identifier>@<host>…<domain> should be recognized as emails. Return the emails as array of strings.

Demo

Source

10.Write a program that extracts from a given text all palindromes, e.g. "ABBA", "lamal", "exe".

Demo

Source

11.Write a function that formats a string using placeholders:

The function should work with up to 30 placeholders and all types

Demo

Source

12.Write a function that creates a HTML UL using a template for every HTML LI. The source of the list should an array of elements. Replace all placeholders marked with –{…}–   with the value of the corresponding property of the object. Example:

Demo

Source

Коментар:

1.Ползвам допълнителна функция StringBuilder и обръщам думите в един цикъл.

2.Ползвам една функция с различни параметри,които броят левите и десните скоби и накрая ги сравнявам.

3.Чрез indexOf броя колко пъти се среща даден подстринг.

4.Използвам 3 отделни функции,в които съответно правя всички малки,големи и миксирани.

5.Заменям всички ' ' със '&nbsp' и връщам  резултата.Не съм сигурен, че точно това трябва да се направи.

6.използвам StringBuilder,indexOf и познизове за да открия текста между таговете.

7.Отново използвам StringBuilder,indexOf и накрая създавам JSON обект от намереното.

8.Просто използвам функцията string.replace

9.отново ползвам indexOf, отделно и lastIndexOf  за един от случеите.

10.правя текстът малък,заменят всички възможни сепаратори с "space" и накрая  сплитвам по него.От получения масив проверявам дали думата е същата и на обратно.

11.Подавам на фукнцията текст и масив от думи, които ще заместват placeholder-ите от текста,

12.Създам в крайна сметка UL както е по условие,но не съм много сигурен, дали има нещо вярно с реалността решението ми.. :)




Отговори



1
В условието на четвърта задача се казва, че таговете може да са вложени. Виж какво ще стане с:
"Normal text some normal text again . We have else."
Става още по-интересно, когато имаме вложени тагове от един и същи вид.

от pirin (1101 точки)


0
За вложените тагове го видях, но в условието не е споменато какво става като са вложени таговете и всеки може да си го разбира както си иска.

от borisfrenkev (165 точки)

0
Ами аз го разбирам, че последния отворен таг показва какво да се случва с буквите. Перфектна ситуация за stack или push и pop функциите на масива. :)

от ivaylo.kenov (30760 точки)



0

В голяма част от решенията могат да се използват регулярни изрази, но те не са предадени на лекцията. Не зная дали е приемливо да се използват. Въпросът важи и за изпита.


от Yavor Atov (0 точки)


0
Важат, както за домашните, така и за изпита, стига да знаеш как да ги използваш.

от vgudzhev (112 точки)


1

Ето и решението на 12 задача, така както трябва да стане според мен. Направил съм си бутон, с който викам функцията, т.к. java script-а се вика след като html-a  е зареден. Като резултат след кликане на бутона изкарвам чист UL, както се изисква в условието. Ето и кода: в GitHub.


от zhelyazkovn (2949 точки)


0
Браво, но решението ти е направено за точни пример в презентацията. Можеш с още един цикъл, който върви по всички пропъртита на всеки човек (например) да го направиш унифицирано.

от v.staykov (212 точки)


2

За 12-та задача смисъла е да работи за шаблони с различни property-та, чиито имена си съответстват в template-а и в масива от обекти. Прилагам моето решение:

http://pastebin.com/DpqienfD

 


от yordan.romeev (225 точки)


0
Ето и моето решение на задача 1: http://pastebin.com/KC1jfQg3 . Разглеждам стринга като масив, правя нов масив със същата дължина, след което го обръщам с for-цикъл.

от borisova (70 точки)


0
Не ти трябва масив - txt[x] върши същата работа.



12

 

Във всички задачи свързани със заместване на някакви последователности в текст е удобно да се използва методът string.replace(). Неговата употреба в JavaScript е изключително лесна и мощна. 
 
Нека имаме следният тестов вход: "The quick brown fox jumps over the lazy dog and the frog". Искаме да заменим "the" с празен стринг.
 
Ако искаме да заменим само първото срещане, използваме следната конструкция: 
var newString = originalString.replace(/the/, "");
 
Ако искаме да заменим всички срещания на "the" във входа, добавяме само една буквичка:
var newString = originalString.replace(/the/g, "");
 
А ако искаме да сме и case-insensitive и да хванем и първото The, добавяме отново само една буква по следният начин: 
var newString = originalString.replace(/the/gi, "");
 
Разбира се, че може да ползваме и любимите regex-и. Ако се случи обаче на изпита да сме притиснати откъм време и да не успеем скоростно да измъдрим регулярния израз, това може да е от полза : )

 


от bmmarinov (1498 точки)


0
Ами ти вече ползваш regex-и :-) Регулярният израз в JS е последователност от символи, започваща и завършваща със slash (/). Незадължителните модификатори g - за глобално търсене и i - за case insensitive search, се поставят след втория символ /.

от vic.alexiev (2299 точки)

0
Ха, да, прав си, мерси за поправката, аз по-скоро визирах онези върволици от неразбираеми символи за нетренираното око, с които човек най-често свързва regex : )

от bmmarinov (1498 точки)



6
Решение на първа задача, работи както за дума, така и за текст. Малко мързеливо решение, но работи.
function ReverseWord(){ var string = jsConsole.read("#tb-string"); var reversedString = string.split('').reverse().join(''); jsConsole.writeLine(reversedString); }

от hrisi (224 точки)


0
Все едно съм гледала от теб, var reversedString = string.split('').reverse().join(''); , едно към едно. :)

от el_b_k (424 точки)

0
Тия са ми любимите решения :) Не е мързеливо, аз му казвам оптимално :D

от KOCTEHYPKATA (5259 точки)


2

Ето и моето решение на задача 4: https://github.com/zlatkov/Telerik/blob/master/JavaScript/Strings/4.TagsTransormText/index.html

 

Идеята е да използвам масив като стек и за всеки отравящ таг, който срещна, да намирам дали следващия след него е отварящ или затварящ, и сътветно да преценя какво да правя (така се справям със вложените тагове). Самите тагове премахвам със регулярни изрази. Излишните празни места, след изчистването на таговете отново премахвам с регулярни изрази. Аз съм приел че например <upcase> text <lowcase> other text </lowcase> </upcase> ще изпечата TEXT OTHER TEXT. Тоест най-логично ми се струва всеки таг да влияе на всичкият текст, съдържащ се в него.

 

Поздрави. :)


от zlatkov (580 точки)


4

Задача 6 се решава с 4 реда:

 

 var text = "<html><head><title>блаблабла..............";
    var regex = /(<([^>]+)>)/ig; 
    var result = text.replace(regex, "");
    jsConsole.writeLine(result);
ехххх тези регулярни изрази

от stefan_petrov (256 точки)


0
Ще се счупи при наличие на математически изрази => var text = "
text
more text
and more...
in body";



2

Моето решение на зад.1 е тук:https://github.com/stoyanovalexander/TheRepositoryOfAlexanderStoyanov/blob/master/07.Strings/02.ConditionalStatements/OperatorsAndExpressions/01.ReverseString.html

Обкалям в обратен ред стринга с един FOR цикъл и приляпям символите му един п един към друг стринг, който накрая принтирам.


от alexander (147 точки)