Софтуерно Инженерство
Loading...
+ Нов въпрос
bulgaria_mitko avatar bulgaria_mitko 132 Точки

[RegEx] Uncle Scrooges Bag

Имам въпрос. използвам https://regex101.com/#javascript както предполагам всеки един от СофтУни. и там regex-а ми е: coin\s*(\d+)\.*[0]*[^.\d+]

Кода, който искам да прихвана е: 

coin 10041
coin 0.99
coin -5
coin 105.0
coin 2002.01
coin fifty
coin -100
cigars 1

което в regex101 ми изкава следните мачове: 

MATCH 1
1.	`10041`
MATCH 2
1.	`105`

Въпроса ми е защо в кода не ми работи? 

Това ми е кода: 

for (var i = 0; i < input.length; i++) {
		var myRegexp = /coin\s*(\d+)\.*[0]*[^.\d+]/;
		var match = myRegexp.exec(input[i]);
		console.log(match);
		if (match != null) {
			allCoins += parseInt(match[1].trim());
		}
	}

като на match ми дава null

Данните, които му подавам са в array: 

uncleScroogeBag(["coin 10041", "coin 0.99", "coin -5", "coin 105.0", "coin 2002.01", "coin fifty", "coin -100", "cigars 1"]);

Мерси!

Тагове:
0
JavaScript Fundamentals
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Това накрая ми се струва, че не прави това, което искаш. Видял ли си в regex101 какво ти хинтва:

[^.\d+] match a single character not present in the list below

  • . matches the character . literally

  • \d match a digit [0-9]

  • + the literal character +

Сигурна ли е работата, че искаш да изключиш точки, една цифра и плюсчета?

Моят съвет към теб е да сложиш по-малък регекс в js-а, и да го допълваш, за да видиш къде се чупи и евентуално как да го накараш да работи.

Например пробвай първо да exec-неш само за цифри:

console.log(/(\d+)/.exec(input[i]))

Виж дали работи. Ако работи сложи да има coin отпред:

console.log(/coin\s*(\d+)/.exec(input[i]))

И така докато започне да дава null/undefined и почвай да търсиш начини да го накараш да работи.

3
bulgaria_mitko avatar bulgaria_mitko 132 Точки

да. проблема е в regex-a но все пак още не мога да разбера, защо ми "тръгваше" на regex101, а в кода, не... мерси :)

1
moholovka avatar moholovka 168 Точки

Няма как да ти работи и в regex101! С този патърн търсиш нещо което да завършва на различно от точка цифра и + :)

 

С този регекс си валидирам реда и си вадя групата - /^coin\s*?(\d+)[.]?[0]*$/gi

3
22/01/2016 10:59:59
bulgaria_mitko avatar bulgaria_mitko 132 Точки

е как ще няма как да работи като работи: 

0
moholovka avatar moholovka 168 Точки

Нашляпал си нови редове а това се брои за символ, затова ти мачва, пробвай само с coin 10041.

1
Margareti avatar Margareti 3 Точки

Здравей :)

И аз имах проблем с null.

Когато исползваш regexp.exec(string), трябва да правиш цикъл така:

while (match = regexp.exec(string) ) {
console.log(match[1])
}

с традиционен цъкл regexp.exec() не работи.

PS. сорри ако правя грешки в български, това не е моят роден език ))

2