Loading...
bulgaria_mitko avatar bulgaria_mitko 133 Точки

[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 Trainer 6849 Точки

Това накрая ми се струва, че не прави това, което искаш. Видял ли си в 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 133 Точки

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

1
moholovka avatar moholovka 169 Точки

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

 

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

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

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

0
moholovka avatar moholovka 169 Точки

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

1
Margareti avatar Margareti 3 Точки

Здравей :)

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

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

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

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

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

2
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.