Pour trouver la différence entre deux chaînes de caractères en Javascript avec la regex

Regex experts s'il vous plaît aider pour voir si ce problème peut être résolu par l'expression régulière suivante:

Chaîne 1 est une chaîne

Et chaîne 2 est une chaîne contenant toutes les parties de la chaîne 1 (mais pas à un simple match -- je vais donner l'exemple)

Comment utiliser les regex pour remplacer toutes les pièces de la chaîne 1 chaîne 2 avec vide de sorte que ce qui reste est la chaîne de caractères pas dans la chaîne 1?

Par exemple:
str1 = "test xyz";
str2 = "test ab xyz"

Je veux "ab" ou "ab" en arrière. Qu'est-ce que la regex que je peux écrire que quand je lance une fonction remplacer sur str2, il sera de retour "ab"?

Voici quelques non-regex code:

            function findStringDiff(str1, str2) {
                var compareString = function(str1, str2) {
                    var a1 = str1.split("");
                    var a2 = str2.split("");
                    var idx2 = 0;
                    a1.forEach(function(val) {
                        if (a2[idx2] === val) {
                          a2.splice(idx2,1);
                        } else {
                            idx2 += 1;
                        }
                    });
                    if (idx2 > 0) {
                        a2.splice(idx2,a2.length);
                    }
                    return a2.join("");
                }

                if (str1.length < str2.length) {
                    return compareString(str1, str2);
                } else {
                    return compareString(str2, str1);
                }
            }

            console.log(findStringDiff("test xyz","test ab xyz"));
  • Je ne vois pas comment les expressions régulières serait utile à tous.
  • Btw, l'algorithme que vous avez montré ici, il semble qu'il n'y a pas de différences entre '$1.00' et '00.1$'.
  • "Ou plus facile et plus rapide de code?" --- est-ce compliqué ou lent?
  • Qu'est-ce que la "différence" de deux chaînes? Les caractères présents dans une seule qui ne sont pas présents dans les autres à la même fréquence? Le résultat obtenu par recherche de la plus longue sous-suite commune et l'enlever? Ou une autre définition?
  • Le code ci-dessus pense même que "ab" et "cd" sont les mêmes.
  • Très bon point. L'idée est de trouver qu'il ya un supplément de dot dans la deuxième chaîne. Quelle est la meilleure façon de le faire? Merci!
  • Quel est le résultat attendu?
  • Dans mon exemple, je veux le plus .
  • Le nouveau code n'est pas bon non plus; il va modifier a2, de sorte que l'index sera éteint.
  • Je pense que vous êtes vraiment essayer de faire est de "détecter la différence entre deux chaînes de caractères". Dans ce cas, vous pourriez être intéressés par cette StackOverflow question du même titre.
  • OK. Merci d'avoir signalé le problème avec le code. Désolé à ce sujet. Mais ma question est: étant donné deux chaînes, il est un moyen à l'aide de la regex pour trouver la différence?
  • Avec la RegEx, vous pouvez venir avec une expression spécifique de détecter des points supplémentaires, ou de l'argent des signes, ou des chiffres supplémentaires, etc.; Il est utilisé pour le filtrage, pas de comparaison générale.
  • regex est de voir si une chaîne correspond à un modèle. Vous ne pouvez pas l'utiliser pour comparer des chaînes de caractères.
  • Enfin, je reçois des commentaires sur les regex. Merci! J'espère que plus de regex experts peuvent partager leurs idées!
  • Pouvez-vous donner des exemples multiples avec plus que juste une d'un caractère différence? On ignore toujours ce que vous voulez.
  • Je me joins de Millie cause. Il n'est pas clair du tout. Point, pas de point? Ou n'importe quelle chaîne?
  • Si vous voulez vous renseigner sur les regex, lire ceci: en.m.wikipedia.org/wiki/Regular_language. Il est précieux de savoir, mais ne sera pas vous faire du bien ici.
  • Disons str1 = "test xyz". Et str2 = "test ab xyz". Je veux "ab" en arrière. Ou "ab" en arrière. L'idée est la entre les 2 cordes, la différence est "ab". "test" + "xyz" = "test xyz" et "test" + "ab" + "xyz" = "test ab xyz".
  • Est-il toujours en argent format? Tout d'abord vous demander de différence de chaînes de caractères, alors que pour l'extra '.', et maintenant, il semble que la différence entre les valeurs de chaîne. Vous devez être plus clair sur ce que l'entrée peut être. Vous NE pouvez pas comparer DEUX chaînes de caractères en utilisant les regex seul. Vous devez exécuter des regex sur chaque chaîne à tester, ou - ce qui vous faisaient déjà avec split()'.
  • Si vous avez abcd et de la brigade, que voulez-vous le résultat? Si vous avez des bd et dbe, qu'est-ce que le résultat souhaité? Si on échange les cordes dans les exemples où la chaîne 1 est une chaîne 2 et chaîne 2 est une chaîne de 1?
  • Je ne peux pas imaginer pourquoi vous voulez utiliser des regex si mal ici. Il semble que vous juste besoin de marcher deux chaînes de gauche à droite, dans le même temps, l'augmentation de chaîne 2 de l'index lorsque le courant de caractères sont différents, et d'augmenter à la fois les indices, les personnages sont les mêmes. chaque fois que vous suffit de déplacer la chaîne 2 de l'index, ajouter le caractère de chaîne 2 de votre résultat. Même si tu arrivais à faire avec les regex, il serait moins lisible solution.
  • Je suis en espérant un regex expert va me dire que c'est juste str = str.remplacer(someRegex, somestuff); Si oui, ce sera juste une ligne droite?
  • Il ne faut pas beaucoup pour être une regex "expert". Pour les fins de notre discussion, supposons que je suis un expert, si je le suis ou pas. Non, vous ne pouvez pas faire cela en une seule ligne avec une regex. Impossible. Fait. Si la réponse à la question est "non", mais vous attendez autour pour quelqu'un qui a plus d'expertise que chaque répondeur avant de vous dire que la réponse est oui, alors vous attendre à jamais, parce que la réponse est non.
  • Si vous avez besoin de moi pour prouver mon "expertise", regexes dans leur forme de base de décrire un langage régulier, d'accepter ou de rejeter les chaînes dans cette langue. J'ai couvert langages réguliers ainsi que des langues et des façons d'écrire le code pour reconnaître ces langues dans plusieurs classes dans le premier cycle et au moins une fois dans l'école de diplômé. Cela devient ridicule.
  • Merci Millie. J'ai juste besoin de savoir si c'est possible ou pas avec la regex. Parfois, les regex, c'est comme de la magie pour moi 🙂
  • Ok. yw. Allez lire sur les langages réguliers et il ne sera pas magique plus
  • J'ai utilisé les regex chaque maintenant et puis. Pour une raison quelconque, il ne colle pas très bien avec moi... Mais je suis toujours fasciné par elle. Je vais le lire plus...
  • Enfin regex est possible. Regarde ma réponse

InformationsquelleAutor techguy2000 | 2015-04-11