Autor Zpráva
Gray blogger
Profil *
Věděl by někdo jak dosáhnout následujícího?
Mám např. takovýto řetězec:
Jeremiah 31:31 הִנֵּה יָמִים בָּאִים נְאֻם־יְהוָה וְכָרַתִּי אֶת־בֵּית יִשְׂרָאֵל וְאֶת־בֵּית יְהוּדָה בְּרִית חֲדָשָֽׁה׃ 32 לֹא כַבְּרִית אֲשֶׁר

A čeho chci dosáhnout, aby se ještě před provedením toho příkazu na posledním řádku nejdříve doplnily závorky {} tam, kde znaky jsou v rozsahu definovaném pomocí regexu alpnum. Takže změna textu by měla vypadat (asi) takto*:
{ Jeremiah 31:31} הִנֵּה יָמִים בָּאִים נְאֻם־יְהוָה וְכָרַתִּי אֶת־בֵּית יִשְׂרָאֵל וְאֶת־בֵּית יְהוּדָה בְּרִית חֲדָשָֽׁה׃ {32} לֹא כַבְּרִית אֲשֶׁר

* - respektive { Jeremiah 31:31 } nejde mi to sem korektně napsat.

String.prototype.splitFirst = function () {
    let alpnum = /[\u1-\u0589, \u05F3-\uFB19, \uFB50-\u10FFFF]/;
    if (comments.checked && alphanum.checked)
       {
       }
    return this.match(/\{[^{]*\}|[^ ]+/g);
};

Ještě bych to zkusil vysvětlit jinak. Pokud bych regex zjednodušil na \w v podstatě bych nahrazoval \w+ za {\w+}
Kajman
Profil
Gray blogger:
Pokud bych regex zjednodušil na \w v podstatě bych nahrazoval \w+ za {\w+}

'text'.replace(/(\w+)/g,'{$1}')
Gray blogger
Profil *
OK, díky. Už to skoro chápu až na jeden detail.


a toto je moje funkce:
text='Jeremiah 31:31 הִנֵּה יָמִים בָּאִים נְאֻם־יְהוָה וְכָרַתִּי אֶת־בֵּית יִשְׂרָאֵל וְאֶת־בֵּית יְהוּדָה בְּרִית חֲדָשָֽׁה׃ 32 לֹא כַבְּרִית אֲשֶׁר כָּרַתִּי אֶת־אֲבֹותָם בְּיֹום הֶחֱזִיקִי בְיָדָם לְהֹוצִיאָם מֵאֶרֶץ מִצְרָיִם אֲשֶׁר־הֵמָּה הֵפֵרוּ אֶת־בְּרִיתִי וְאָנֹכִי בָּעַלְתִּי בָם נְאֻם־יְהוָֽה׃ 33 כִּי זֹאת הַבְּרִית אֲשֶׁר אֶכְרֹת אֶת־בֵּית יִשְׂרָאֵל אַחֲרֵי הַיָּמִים הָהֵם נְאֻם־יְהוָה נָתַתִּי אֶת־תֹּֽורָתִי בְּקִרְבָּם וְעַל־לִבָּם אֶכְתֲּבֶנָּה וְהָיִיתִי לָהֶם לֵֽאלֹהִים וְהֵמָּה '
String.prototype.splitAndReplaceBraces = function () {
    let alpnum = /([\u1-\u0589, \u05F3-\uFB19, \uFB50-\uFFFF]+)/g;    
    if (comments.checked && alphanum.checked)
       {
       return this.replace(alpnum,'{$1}');
       }
    return;
};
var textArr = text.splitAndReplaceBraces();
console.log(textArr);

Tak dostanu toto:
{Jeremiah 31:31 }הִנֵּה{ }יָמִים{ }בָּאִים{ }נְאֻם־יְהוָה{ }וְכָרַתִּי{ }אֶת־בֵּית{ }יִשְׂרָאֵל{ }וְאֶת־בֵּית{ }יְהוּדָה{ }בְּרִית{ }חֲדָשָֽׁה׃{ 32 }לֹא{ }כַבְּרִית{ }אֲשֶׁר{ }כָּרַתִּי{ }אֶת־אֲבֹותָם{ }בְּיֹום{ }הֶחֱזִיקִי{ }בְיָדָם{ }לְהֹוצִיאָם{ }מֵאֶרֶץ{ }מִצְרָיִם{ }אֲשֶׁר־הֵמָּה{ }הֵפֵרוּ{ }אֶת־בְּרִיתִי{ }וְאָנֹכִי{ }בָּעַלְתִּי{ }בָם{ }נְאֻם־יְהוָֽה׃{ 33 }כִּי{ }זֹאת{ }הַבְּרִית{ }אֲשֶׁר{ }אֶכְרֹת{ }אֶת־בֵּית{ }יִשְׂרָאֵל{ }אַחֲרֵי{ }הַיָּמִים{ }הָהֵם{ }נְאֻם־יְהוָה{ }נָתַתִּי{ }אֶת־תֹּֽורָתִי{ }בְּקִרְבָּם{ }וְעַל־לִבָּם{ }אֶכְתֲּבֶנָּה{ }וְהָיִיתִי{ }לָהֶם{ }לֵֽאלֹהִים{ }וְהֵמָּה{ }

Což je skoro OK, ale nevíš jak vzniklo to za číslem 31 je dvakrát } a na konci je dvakrát { a jak by se to teda dalo opravit abych měl toto?
{Jeremiah 31:31 הִנֵּה{ }יָמִים{ }בָּאִים{ }נְאֻם־יְהוָה{ }וְכָרַתִּי{ }אֶת־בֵּית{ }יִשְׂרָאֵל{ }וְאֶת־בֵּית{ }יְהוּדָה{ }בְּרִית{ }חֲדָשָֽׁה׃{ 32 }לֹא{ }כַבְּרִית{ }אֲשֶׁר{ }כָּרַתִּי{ }אֶת־אֲבֹותָם{ }בְּיֹום{ }הֶחֱזִיקִי{ }בְיָדָם{ }לְהֹוצִיאָם{ }מֵאֶרֶץ{ }מִצְרָיִם{ }אֲשֶׁר־הֵמָּה{ }הֵפֵרוּ{ }אֶת־בְּרִיתִי{ }וְאָנֹכִי{ }בָּעַלְתִּי{ }בָם{ }נְאֻם־יְהוָֽה׃{ 33 }כִּי{ }זֹאת{ }הַבְּרִית{ }אֲשֶׁר{ }אֶכְרֹת{ }אֶת־בֵּית{ }יִשְׂרָאֵל{ }אַחֲרֵי{ }הַיָּמִים{ }הָהֵם{ }נְאֻם־יְהוָה{ }נָתַתִּי{ }אֶת־תֹּֽורָתִי{ }בְּקִרְבָּם{ }וְעַל־לִבָּם{ }אֶכְתֲּבֶנָּה{ }וְהָיִיתִי{ }לָהֶם{ לֵֽאלֹהִים{ }וְהֵמָּה{ }
Kajman
Profil
Používat v prototype metodě globální proměnné mně nepřijde košer. Hebrejština se tuším píše zprava doleva, v tom případě ty závorky v nich čtěte taky zprava doleva.

Zkuste regulár

/([^\u0590-\u05F2\uFB20-\uFB49 ]+(:?\s[^\u0590-\u05F2\uFB20-\uFB49 ]+)*)/g
Gray blogger
Profil *
Ale vypadá to, že jsem to už definitivně vyřešil:
this.replace(alpnum,'{$1}').replace(/{(\w| +)}/g, '$1');

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0