【问题标题】:Get from string with regular expression [duplicate]使用正则表达式从字符串中获取[重复]
【发布时间】:2018-02-14 11:16:52
【问题描述】:

我需要从字符串中提取

userAllowedCrud['create'] [] 内部的部分。

我认为使用正则表达式是更好的方法。我错了吗?

【问题讨论】:

  • “我认为使用正则表达式是更好的方法” - 为了让一件事比另一件事更好,你至少需要两件事......所以,第二个/其他人会怎么做?

标签: javascript regex string


【解决方案1】:

对于示例字符串,您可以使用split,它将返回一个数组并指定单引号' 作为分隔符。

您的值将是数组中的第二项。

var string = "userAllowedCrud['create']";
console.log(string.split("'")[1]);

如果您想使用正则表达式,您可以使用: ^[^\[]+\['([^']+)']$\['([^']+)']

您的值将在第 1 组中

第一个正则表达式将匹配:

^ # 字符串的开始 [^[]+ # 不匹配 [ 一次或多次 [' # 匹配 [' ( # 在一个组中捕获 (group 1) [^']+ # 一次或多次不匹配' ) # 关闭捕获组 '] # 匹配 '] $ # 字符串结束

第二个正则表达式在一个组中捕获[''] 之间没有^$ 之间的内容

var string = "userAllowedCrud['create']";
var pattern1 = /^[^\[]+\['([^']+)']$/;
var pattern2 = /\['([^']+)']/
console.log(string.match(pattern1)[1]);
console.log(string.match(pattern2)[1]);

【讨论】:

    【解决方案2】:

    您可以使用正则表达式,例如:/\[([^\]]*)\]/\[ 表示匹配一个[\] 表示匹配一个][^\]]* 表示匹配0 个或多个不是右括号的任何字符。

    console.log(
        "userAllowedCrud['create']".match(/\[([^\]]*)\]/)[1]
    );
    
    // Output:
    // 'create'
    

    如果您需要括号内的引号内的内容,有很多解决方案,例如:

    // for single and double quotes
    "userAllowedCrud['create']".match(/\[([^\]]*)\]/)[1].slice(1, -1)
    
    // Or (for single and double quotes):
    "userAllowedCrud['create']".match(/\[("|')([^\]]*)\1\]/)[2]
    
    // Or (for single and double quotes):
    "userAllowedCrud['create']".match(/\[(["'])([^\]]*)\1\]/)[2]
    
    // Or (for single quotes):
    "userAllowedCrud['create']".match(/\['([^\]]*)'\]/)[1]
    
    // Or (for double quotes):
    "userAllowedCrud['create']".match(/\['([^\]]*)'\]/)[1]
    

    还有很多其他的方法,这只是其中的一小部分。 我建议研究学习正则表达式:https://stackoverflow.com/a/2759417/3533202

    【讨论】:

    • 谢谢@scagood。但我需要它而不需要'只是创建而不是'创建'
    • @LeonelMatiasDomingos - 你可以使用类似:.match(/\[(["'])([^\]]*)\1\]/)[2]。反而。我强烈建议您查看stackoverflow.com/a/2759417/3533202 以获取有关正则表达式的更多信息
    【解决方案3】:

    尝试使用javascript字符串操作

    let tempString = "userAllowedCrud['create']";
    let key = str => str.substring(
        str.indexOf("'") + 1,
        str.lastIndexOf("'")
    );
    console.log(key(tempString))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多