【问题标题】:Is there an "and" operator for regular expressions in Javascript?Javascript中的正则表达式是否有“and”运算符?
【发布时间】:2015-02-16 17:18:10
【问题描述】:

也就是说,有没有办法找到字符串的哪些部分匹配两个或多个正则表达式,例如string.replace(/foo/g, /bar/g, "baz");

编辑:不,我不是在寻找一个单一的正则表达式来匹配这两者。更合适的例子是string.replace(foo, /bar/g, "baz")

编辑 2: 抱歉,我是新用户。一个示例输入是"abc".replace(x, /[bc]/g, "[match]"),其中x 是一个值为/[ab]/g 的变量,在这种情况下应该返回a[match]c

【问题讨论】:

  • 应该用什么替换什么?
  • 请详细说明,我不明白你在问什么
  • @BobTheAwesome 对你来说 string.replace(/foo/g, /bar/g, "baz");string.replace(foo, /bar/g, "baz") 有什么区别?就做string.replace(/(foo|bar)/g, "baz");
  • string.replace(foo, /bar/g, "baz"). 是什么意思?通常,您最好的选择是显示输入和期望的输出。
  • 我认为这是一个很好的问题,它可以使用更多的澄清。我想我们大多数人都很困惑。

标签: javascript regex


【解决方案1】:

以您的示例为例,我认为您的意思是“或”,而不是“与”。 | 运算符可用于此:

string.replace(/(foo|bar)/g, "baz");

【讨论】:

  • 我的意思是和。例如,匹配文档正文的 HTML 中属于 A 但也不在 HTML 标记中的字符(例如“span”)。
  • @BobTheAwesome:Don't use regex to parse HTML。使用解析器解析 HTML。
  • @T.J.Crowder 我正在为尚未命名的two-dimensional programming language(我在 KACS 环境中编写的一种深奥的编程语言)的文档中创建一个对字符进行颜色编码的脚本。脚本将遍历字符并包围,例如,<span class="programFlow"></span> 中调节程序流程的字符。
  • @BobTheAwesome:这意味着您必须以不同的方式处理文字字符串中的关键字与不存在的关键字,并且大概该语言允许转义字符串周围的引号。遗憾的是,Regex 不是该工作的正确工具。现在,如果您 没有 需要处理不在文字字符串中执行此操作,那将是不同的......
  • @BobTheAwesome:顺便说一句,这听起来不像你在问题中描述的那样。
【解决方案2】:

一个示例输入是 "abc".replace(x, /[bc]/g, "[match]"),其中 x 是一个值为 /[ab]/g 的变量,在这种情况下应该返回一个[匹配]b。

听起来您正在寻找捕获组和replace 回调。

  • 捕获组是正则表达式的一部分,告诉引擎“捕获”与该部分匹配的位。

  • replace 回调是 replace 将为每个匹配调用的函数,让您创建替换文本。该函数传递整体匹配和任何捕获组。

因此,例如,如果您想匹配字母 a-z 和数字 0-9 之间的任何内容,并对中间的位做一些事情:

var result = "afoo9".replace(/([a-z])(.+)([0-9])/g, function(match, c0, c1, c2) {
    return c0 + c1.toUpperCase() + c2;
});
  • ([a-z]) 表示“匹配从az 的任何字符并捕获它”

  • (.+) 表示“在这里匹配一个或多个字符并捕获它们”

  • ([0-9]) 表示“匹配从09 的任意字符并捕获它”(也可以写成(\d)

当然,这很做作,您可能希望在每一端匹配多个字符,但这是一个正则表达式细节。

活生生的例子:

var str = "afoo9";
var result = str.replace(/([a-z])(.+)([0-9])/g, function(match, c0, c1, c2) {
    return c0 + c1.toUpperCase() + c2;
});
snippet.log("String: " + str);
snippet.log("Result: " + result);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

【讨论】:

  • 我知道这两个是什么,我要求一个“和”运算符!字符串的哪些部分匹配两个正则表达式?这不是我问题的答案!
  • @BobTheAwesome:不用大喊大叫。如果这不能回答您的问题,那么您的问题仍然真的不清楚。
  • @BobTheAwesome,没有这样的运营商。 T.J. Crowder 正在向您展示最接近的近似值。
【解决方案3】:

您可以首先使用第一个正则表达式提取满足第一个规则的字符串,然后使用第二个正则表达式(或用正则表达式替换)来执行操作。

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    相关资源
    最近更新 更多