Heim  >  Artikel  >  CMS-Tutorial  >  Ein Anfängerleitfaden zu regulären Ausdrücken in JavaScript

Ein Anfängerleitfaden zu regulären Ausdrücken in JavaScript

WBOY
WBOYOriginal
2023-08-30 15:05:05561Durchsuche

Ein Anfängerleitfaden zu regulären Ausdrücken in JavaScript

Jeder, der JavaScript verwendet, muss sich irgendwann mit Strings auseinandersetzen. Manchmal speichert man die Zeichenfolge einfach in einer anderen Variablen und gibt sie weiter. In anderen Fällen müssen Sie es untersuchen und prüfen, ob es eine bestimmte Teilzeichenfolge enthält.

Allerdings sind die Dinge nicht immer einfach. Manchmal suchen Sie nicht nach einem bestimmten Teilstring, sondern nach einer Reihe von Teilstrings, die einem bestimmten Muster folgen.

Angenommen, Sie müssen alle Vorkommen von „Apples“ in einer Zeichenfolge durch „apples“ ersetzen. Sie können einfach theMainString.replace("Apples", "apples") verwenden. Gut und einfach.

Angenommen, Sie müssen auch „appLes“ durch „apples“ ersetzen. Ebenso sollte „appLES“ zu „apples“ werden. Grundsätzlich müssen alle Schreib- und Schreibweisen von „Apple“ in „apple“ geändert werden. In diesem Fall ist die Übergabe einer einfachen Zeichenfolge als Argument nicht mehr praktisch oder effizient.

Hier kommen reguläre Ausdrücke ins Spiel – Sie können einfach das Flag „Groß-/Kleinschreibung nicht berücksichtigen“ verwenden i und fertig. Mit diesem Flag spielt es keine Rolle, ob die ursprüngliche Zeichenfolge „Apples“, „APPles“, „ApPlEs“ oder „Apples“ enthält. Jedes Vorkommen des Wortes wird durch „Äpfel“ ersetzt.

Genau wie die Flagge, bei der die Groß-/Kleinschreibung nicht beachtet wird, bieten reguläre Ausdrücke viele weitere Funktionen, die in diesem Tutorial behandelt werden.

Verwendung regulärer Ausdrücke in JavaScript

Sie müssen eine leicht unterschiedliche Syntax verwenden, um reguläre Ausdrücke in verschiedenen String Methoden anzugeben. Im Gegensatz zu einer einfachen Zeichenfolge, die in Anführungszeichen eingeschlossen ist, besteht ein regulärer Ausdruck aus einem zwischen Schrägstrichen eingeschlossenen Muster. Alle Flags, die Sie im regulären Ausdruck verwenden, werden nach dem zweiten Schrägstrich angehängt.

Zurück zum vorherigen Beispiel: Hier sehen Sie, wie die replace()-Methode mit regulären Ausdrücken und einer einfachen Zeichenfolge aussieht.

"I ate Apples".replace("Apples", "apples");
// I ate apples

"I ate Apples".replace(/Apples/i, "apples");
// I ate apples

"I ate aPPles".replace("Apples", "apples");
// I ate aPPles

"I ate aPPles".replace(/Apples/i, "apples");
// I ate apples

Wie Sie sehen, funktioniert der reguläre Ausdruck in beiden Fällen. Wir erfahren nun mehr über die Flags und Sonderzeichen, aus denen Muster in regulären Ausdrücken bestehen.

Backslash in regulären Ausdrücken

Sie können normale Zeichen in Sonderzeichen umwandeln, indem Sie ihnen einen Backslash voranstellen. Ebenso können Sie Sonderzeichen in normale Zeichen umwandeln, indem Sie ihnen einen Backslash voranstellen.

Zum Beispiel wird d 不是特殊字符。然而, d 用于匹配字符串中的数字字符。同样,D 也不是特殊字符,但 D verwendet, um nicht numerische Zeichen in einer Zeichenfolge abzugleichen.

Zu den Zahlenzeichen gehören 0, 1, 2, 3, 4, 5, 6, 7, 8 und 9. Wenn Sie d 时,它将匹配以下任何一个九个字符。当您在正则表达式中使用 D in einem regulären Ausdruck verwenden, werden alle nicht numerischen Zeichen abgeglichen.

Das folgende Beispiel soll die Sache verdeutlichen.

"L8".replace(/\d/i, "E");
// LE

"L8".replace(/\D/i, "E");
// E8

"LLLLL8".replace(/\D/i, "E");
// ELLLL8

Beachten Sie, dass im dritten Fall nur das erste passende Zeichen ersetzt wird. Sie können Flags auch verwenden, um alle Übereinstimmungen zu ersetzen. Wir werden später mehr über solche Flaggen erfahren.

Genau wie dD gibt es noch weitere Sonderzeichenfolgen.

  1. Sie können w verwenden, um jedes „Wort“-Zeichen in einer Zeichenfolge zuzuordnen. Hier beziehen sich Wortzeichen auf A-Z, a-z, 0-9 und _. Im Grunde werden also alle Zahlen, alle Klein- und Großbuchstaben sowie Unterstriche abgeglichen.
  2. Sie können W verwenden, um jedes Nicht-Wort-Zeichen in einer Zeichenfolge abzugleichen. Es werden Zeichen wie %, $, #, $ usw. gefunden.
  3. Sie können s 来匹配单个空白字符,其中包括空格、制表符、换页符和换行符。同样,您可以使用 S verwenden, um alle anderen Zeichen außer Leerzeichen abzugleichen.
  4. Sie können fnrtv auch verwenden, um Seitenvorschub, Zeilenvorschub, Wagenrücklauf, horizontalen Tabulator bzw. vertikalen Tabulator darzustellen.

Manchmal stoßen Sie auf eine Situation, in der Sie ein Wort durch eine Alternative ersetzen müssen, aber nur, wenn es nicht Teil eines größeren Wortes ist. Betrachten Sie zum Beispiel den folgenden Satz:

"Viele Ananasbilder in der App gepostet".

In diesem Beispiel möchten wir das Wort „App“ durch „Board“ ersetzen. Die Verwendung eines einfachen Regex-Musters würde jedoch „apple“ in „boardle“ verwandeln und der letzte Satz würde wie folgt lauten:

„In der App sind viele Bilder von Kiefernbrettern gepostet.“

在这种情况下,您可以使用另一个特殊字符序列:\b。这会检查单词边界。单词边界是通过使用任何非单词字符(如空格、“$”、“%”、“#”等)形成的。不过请注意,它还包括重音字符,如“ü”。

"A lot of pineapple images were posted on the app".replace(/app/, "board");
// A lot of pineboardle images were posted on the app

"A lot of pineapple images were posted on the app".replace(/\bapp/, "board");
// A lot of pineapple images were posted on the board

同样,您可以使用 \B 来匹配非单词边界。例如,您可以使用 \B 仅匹配位于另一个单词(如“pineapple”)内的“app”。

匹配模式“n”次

您可以使用 ^ 告诉 JavaScript 仅查看字符串的开头以进行匹配。同样,您可以使用 $ 仅查看字符串末尾的匹配项。

您可以使用 * 来匹配前面的表达式 0 次或多次。例如,/Ap*/ 将匹配 AApAppAppp强>,等等。

类似地,您可以使用 + 来匹配前面的表达式 1 次或多次。例如,/Ap+/ 将匹配 ApAppAppp 等。这次表达式将不会匹配单个 A

有时,您只想匹配给定模式的特定出现次数。在这种情况下,您应该使用 {n} 字符序列,其中 n 是数字。例如,/Ap{2}/ 将匹配 App,但不匹配 Ap。它还将匹配 Appp 中的前两个“p”,并保持第三个“p”不变。

您可以使用 {n,} 来匹配给定表达式的至少“n”次出现。这意味着 /Ap{2,}/ 将匹配 App,但不匹配 Ap。它还将匹配 Apppp 中的所有“p”,并将它们替换为您的替换字符串。

您还可以使用 {n,m} 指定最小和最大数量,并限制给定表达式应匹配的次数。例如,/Ap{2,4}/ 将匹配 AppApppApppp。它还将匹配 Apppppp 中的前四个“p”,并保持其余部分不变。

"Apppppples".replace(/Ap*/, "App");
// Apples

"Ales".replace(/Ap*/, "App");
// Apples

"Appppples".replace(/Ap{2}/, "Add");
// Addppples

"Appppples".replace(/Ap{2,}/, "Add");
// Addles

"Appppples".replace(/Ap{2,4}/, "Add");
// Addples

使用括号来记住匹配

到目前为止,我们只用常量字符串替换了模式。例如,在上一节中,我们使用的替换始终是“Add”。有时,您必须在给定字符串中查找模式匹配,然后将其替换为模式的一部分。

假设您必须在字符串中找到一个包含五个或更多字母的单词,然后在该单词的末尾添加一个“s”。在这种情况下,您将无法使用常量字符串值作为替换,因为最终值取决于匹配模式本身。

"I like Apple".replace(/(\w{5,})/, '$1s');
// I like Apples

"I like Banana".replace(/(\w{5,})/, '$1s');
// I like Bananas

这是一个简单的示例,但您可以使用相同的技术在内存中保留多个匹配模式。完整匹配中的子模式数量将由使用的括号数量决定。

在替换字符串中,第一个子匹配将使用 $1 标识,第二个子匹配将使用 $2 标识,依此类推。这是另一个例子,进一步阐明括号的用法。

"I am looking for John and Jason".replace(/(\w+)\sand\s(\w+)/, '$2 and $1');
// I am looking for Jason and John

将标志与正则表达式结合使用

正如我在简介中提到的,正则表达式的一个更重要的功能是使用特殊标志来修改搜索的执行方式。这些标志是可选的,但您可以使用它们来执行诸如全局搜索或不区分大小写之类的操作。

这些是四个常用的标志,用于更改 JavaScript 搜索或替换字符串的方式。

  • g:该标志将执行全局搜索,而不是在第一个匹配后停止。
  • i:此标志将执行搜索,而不检查大小写是否完全匹配。例如,在不区分大小写的搜索中,Apple、aPPLe 和 apPLE 的处理方式都是相同的。
  • m:该标志将执行多行搜索。
  • y:此标志将在 lastIndex 属性指示的索引中查找匹配项。

以下是与标志一起使用的正则表达式的一些示例:

"I ate apples, you ate apples".replace(/apples/, "mangoes");
// "I ate mangoes, you ate apples"

"I ate apples, you ate apples".replace(/apples/g, "mangoes");
// "I ate mangoes, you ate mangoes"

"I ate apples, you ate APPLES".replace(/apples/, "mangoes");
// "I ate mangoes, you ate APPLES"

"I ate apples, you ate APPLES".replace(/apples/gi, "mangoes");
// "I ate mangoes, you ate mangoes"


var stickyRegex = /apples/y;
stickyRegex.lastIndex = 3;
"I ate apples, you ate apples".replace(stickyRegex, "mangoes");
// "I ate apples, you ate apples"

var stickyRegex = /apples/y;
stickyRegex.lastIndex = 6;
"I ate apples, you ate apples".replace(stickyRegex, "mangoes");
// "I ate mangoes, you ate apples"

var stickyRegex = /apples/y;
stickyRegex.lastIndex = 8;
"I ate apples, you ate apples".replace(stickyRegex, "mangoes");
// "I ate apples, you ate apples"

最终想法

本教程的目的是向您介绍 JavaScript 中的正则表达式及其重要性。我们从基础知识开始,然后介绍反斜杠和其他特殊字符。我们还学习了如何检查字符串中的重复模式以及如何记住模式中的部分匹配以便以后使用它们。

最后,我们了解了常用的标志,它们使正则表达式变得更加强大。您可以在 MDN 上的这篇文章中了解有关正则表达式的更多信息。

Wenn Sie möchten, dass ich etwas in diesem Tutorial klarstelle, teilen Sie mir dies bitte in den Kommentaren mit.

Das obige ist der detaillierte Inhalt vonEin Anfängerleitfaden zu regulären Ausdrücken in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn