【发布时间】:2018-02-14 11:16:52
【问题描述】:
我需要从字符串中提取
userAllowedCrud['create'][]内部的部分。
我认为使用正则表达式是更好的方法。我错了吗?
【问题讨论】:
-
“我认为使用正则表达式是更好的方法” - 为了让一件事比另一件事更好,你至少需要两件事......所以,第二个/其他人会怎么做?
标签: javascript regex string
我需要从字符串中提取
userAllowedCrud['create'][]内部的部分。
我认为使用正则表达式是更好的方法。我错了吗?
【问题讨论】:
标签: javascript regex string
对于示例字符串,您可以使用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]);
【讨论】:
您可以使用正则表达式,例如:/\[([^\]]*)\]/。 \[ 表示匹配一个[,\] 表示匹配一个],[^\]]* 表示匹配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
【讨论】:
.match(/\[(["'])([^\]]*)\1\]/)[2]。反而。我强烈建议您查看stackoverflow.com/a/2759417/3533202 以获取有关正则表达式的更多信息
尝试使用javascript字符串操作
let tempString = "userAllowedCrud['create']";
let key = str => str.substring(
str.indexOf("'") + 1,
str.lastIndexOf("'")
);
console.log(key(tempString))
【讨论】: