Je cherche une fonction qui namespace une chaîne, par exemple si je voulu namespace la chaîne suivante avec « MyLib »,Comment namespace une chaîne (par exemple 'a (x) + b' => 'Namespace.a (x) + Namespace.b')
"select('#input') + someconstant * otherconstant"
sera changé pour
"MyLib.select('#input') + MyLib.someconstant * MyLib.otherconstant"
BTW prend dans une chaîne en entrée, et retourne une autre chaîne
la raison pour laquelle je vouloir faire c'est parce que je suis en train d'écrire une interface utilisateur ich compare mes fonctions mathématiques personnalisées avec une autre bibliothèques fonctions mathématiques personnalisées, par exemple, l'utilisateur peut taper
"factorial(2) + sin(intpow(2, 4))"
qui serait converti en
"MyCustomLib.factorial(2) + MyCustomLib.sin(MyCustomLib.intpow(2, 4))"
/* and */
"OtherLib.factorial(2) + OtherLib.sin(OtherLib.intpow(2, 4))"
Et puis je peux utiliser eval() pour évaluer (ne vous inquiétez pas de moi en utilisant eval, l'inquiétude au sujet de la question :))
ma fonction actuelle ressemble
const namespace = (str, ns) => {
ns = ns + '.'; // add the dot to the namespace
let s = String(str),
m, // the result of regex
re = /\w+/g, // only namespace words
a = 0; // because there are two strings, and i am
// only adding to one of them,
// i have to increase the index to make up for
// the difference between the two
while ((m = re.exec(str)) !== null) { // until there is no more words
// get the new string (put the namespace in)
// eg. "(junk) abc (junk)" => "(junk) Namespace.abc (junk)"
s = s.slice(0, m.index + a) + ns + s.slice(m.index + a);
a += ns.length; // add to the offset
}
return s; // return the parsed string
};
où str param est la chaîne d'entrée, et est l'ns
param espace de noms
cela fonctionne, par exemple.
namespace("PI * sin(E)", "Math") === "Math.PI * Math.sin(Math.E)"
mais cela ne fonctionne pas pleinement, à savoir
namespace("23", "abc"); /* === "abc.23" */
Circonstances où il place l'égalité "23"
des idées?
cela ne fonctionnera pas, sur ce « abc234 »? les variables peuvent se terminer par les nombres –
hmm, wow merci de m'inspirer! Je suppose que –
/[a-zA-Z] \ w */g fonctionne –