【问题标题】:Javascript - Get character between two characters using Regex [duplicate]Javascript - 使用正则表达式获取两个字符之间的字符[重复]
【发布时间】:2016-04-20 01:59:13
【问题描述】:

我有这样的字符串"[Total MM] / [Total-MD] - [Total-MC]"。我只想在 javascript 上使用正则表达式获取 ][ 之间的字符。上面这个字符串的例子,只返回"/""-"

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    试试这个

    \]\s*([^[]+?)\s*\[
    

    Regex demo

    var re = /\]\s*([^[]+?)\s*\[/g; 
    var str = '[Total MM] / [Total-MD] - [Total-MC]';
    var m;
    
    while ((m = re.exec(str)) !== null) {
        if (m.index === re.lastIndex) {
            re.lastIndex++;
        }
        // View your result using the m-variable.
        // eg m[0] etc.
    }
    

    【讨论】:

    • 感谢@Tim007,您的回答看起来不错,但您忘记删除两个字符"[""]"
    • @Võ Minh Phong 它在捕获的值中,而不是匹配的值
    • 如果字符串不以括号表达式开头,这将如何表现?
    【解决方案2】:

    有多种方法可以做到这一点,但我认为最直接的方法是两个正则表达式:一个匹配 ][ 之间的内容,另一个删除括号和空格:

    var str = "[Total MM] / [Total-MD] - [Total-MC]";
    str
        .match(/\].*?\[/g)
        .map(m => m.replace(/\]\s*|\s*\[/g, ''));
    

    这是CodePen with a live demo

    【讨论】:

    • 非常感谢@Ethan Brown。这是给我的。
    • 很高兴能帮上忙!
    • 嗨,Ethan,我在你的回答中看到语法=>,它看起来像在 C# 中的 LinQ 中。一样吗?
    • 这是 ES6 语法...您可以将 => 替换为 function 语法
    【解决方案3】:

    创建一个匹配括号内的 IS 的正则表达式,但不捕获它;然后是捕获其他所有内容的替代方法。

    /\[.*?\]|([^[]*)/g
     ^^^^^^^               MATCH STUFF IN BRACKETS, DO NOT CAPTURE
              ^^^^^^       MATCH ANYTHING ELSE, DO CAPTURE
    

    https://regex101.com/r/oQ8pB2/1。请参阅右侧的“匹配信息”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 2018-03-22
      相关资源
      最近更新 更多