Autor | Zpráva | ||
---|---|---|---|
Gray blogger Profil * |
#1 · Zasláno: 4. 9. 2019, 17:31:41
Mohl by mi tu někdo pomoct? Nevím jak to udělat, JS mi moc nejde.
Mám jednu aplikaci, která rozparsuje text na slova (mezera je použitá na rozparsování). Jenže co potřebuju udělat je toto: když dám text do složených závorek, tak celé to musí být naparsováno jako jeden element. Např. {3.9. pondělí:} Nějaká věta se slovy. {4.9. úterý:} Další věta na rozparsování. Elementy by měly být rozparsovány takto: 0 => "{3.9. pondělí:}", 1 => "Nějaká", 2 => "věta", 3 => "se", 4 => "slovy.", 5 => "{4.9. úterý:}", 6 => "Další", 7 => "věta", 8 => "na", 9 => "Rozparsování." |
||
Keeehi Profil |
#2 · Zasláno: 4. 9. 2019, 19:21:02
Můžou být složené závorky uvnitř složených závorek? A může se stát, že bude potřeba složená závorka i jako obyčejný znak v textu?
|
||
Gray blogger Profil * |
#3 · Zasláno: 4. 9. 2019, 19:39:31
Ne. Uvnitř složených závorek jsou povolené znaky bez závorek. A mimo závorky být závorky nemůžou, protože ty závoroky jsou vyhrazené právě na to, aby oddělili ten text v závorce od ostatního textu.
|
||
Keeehi Profil |
Pak je to celkem jednoduché
var data = "{3.9. pondělí:} Nějaká věta se slovy. {4.9. úterý:} Další věta na rozparsování."; var matches = data.matchAll(/\{[^{]*\}|[^ ]+/g) for (var match of matches) { console.log(`Found ${match[0]} start=${match.index} end=${match.index + match[0].length}.`); } |
||
Gray blogger Profil * |
#5 · Zasláno: 5. 9. 2019, 09:16:58
Keeehi:
Díky moc. Jsem překvapen že je to tak jednoduché! Ale jak to mám dostat do toho prototypu. Cílem mého pokusu je, aby se mi vypsalo pole: String.prototype.splitMe = function (char) { var data = "{3.9. pondělí:} Nějaká věta se slovy. {4.9. úterý:} Další věta na rozparsování."; var matches = data.matchAll(/\{[^{]*\}|[^ ]+/g) return matches; }; var test = "pokus"; console.log(test.splitMe); function String.prototype.splitMe() |
||
Kajman Profil |
#6 · Zasláno: 5. 9. 2019, 09:39:32
String.prototype.splitMe = function () { return this.match(/\{[^{]*\}|[^ ]+/g); }; var test = "{3.9. pondělí:} Nějaká věta se slovy. {4.9. úterý:} Další věta na rozparsování."; console.log(test.splitMe()); |
||
Gray blogger Profil * |
Díky :)
Mohu tě ještě o něco požádat? Alespoň o radu. Aplikace, kterou se snažím trochu upravit převádí hebrejské znaky na českou výslovnost. Mají tam takovou funkci, která nejdříve rozparsuje text takto: return text.split(splits) Array [ "{31}", " ", "נֵּ", "ה", " ", "יָ", "מִ", "י", "ם", 275 dalších… 275 ]transliterate.js:91:5 Ten jejich kód pak pokračuje funkcí map uvnitř které se zpracovávají jednotlivé elementy (e) toho pole. Pak se to asi dělí na jednotlivá písmena. Co ale nechápu proč tam je ta funkce sort. Uvažuju nad tím jak tuto funkci modifikovat. Jde o to, že ve výsledku to odstraní ty čísla, která já odstranit nechci. Nápad, který jsem teď dostal, napsat si vlastní funkci pro ten druhý split(""), aby nedošlo ke splitování toho textu se závorkou. Vlastně ale budu muset napsat i vlastní prototyp na ten sort asi - aby nedošlo k té změně na řetězci {31} , {32} atd. V současnosti ten druhý split dělá toto: Array [ "{", "3", "1", "}" ]transliterate.js:100:11 Array [ " " ]transliterate.js:100:11 Array [ "ה", "ִ" ]transliterate.js:100:11 Array [ "נ", "ּ", "ֵ" ]transliterate.js:100:11 Array [ "ה" ]transliterate.js:100:11 Array [ " " ]transliterate.js:100:11 Array [ "י", "ָ" ]transliterate.js:100:11 Array [ "מ", "ִ" ]transliterate.js:100:11 Array [ "י" ] Po úpravě: String.prototype.splitSecond = function () { if (CharAt(0)='{' ) return [this] else return this.split(''); }; console.log(e.splitFirst()); Vypisuje: Array [ "{31}" ]transliterate.js:99:12 nulltransliterate.js:99:12 Array [ "הִ" ]transliterate.js:99:12 Array [ "נֵּ" ]transliterate.js:99:12 Array [ "ה" ]transliterate.js:99:12 nulltransliterate.js:99:12 Array [ "יָ" ]transliterate.js:99:12 Array [ "מִ" ]transliterate.js:99:12 Array [ "י" ]transliterate.js:99:12 Array [ "ם" ]transliterate.js:99:12 null Tedy místo mezery vrací null. Jak opravit toto? A pak bych potřeboval napsat vlastní prototyp na sort. Jo a zapoměl jsem vložit ten kód return text.split(splits).map(e => { console.log(e.splitFirst()); return e.split('').sort((a,b) => { // since the str is split at consonants, the first a is always const, thus never flip if(consonants.test(a) ) {return 0} // if a is anything except a consonant and b is a ligature, then flip if(!consonants.test(a) && ligature.test(b)){return 1} if(vowels.test(a) && dagesh.test(b)) {return 1} if(accents.test(a) && dagesh.test(b)) {return 1} }).join('') }).join('') |
||
Gray blogger Profil * |
#8 · Zasláno: 5. 9. 2019, 12:42:50
Našel jsem dvě chyby. Funkce se jmenuje splitSecond ne splitFirst.
String.prototype.splitSecond = function () { if (this.charAt(0)=='{' ) return [this] else return this.split(''); }; Nicméně proč mi return [this] nevrací ten string (dovnitř pole)? this je objekt. |
||
Časová prodleva: 5 let
|
0