我有以下字符串
234234=AWORDHERE('sdf.'aa')
我需要提取AWORDHERE
。
有时候两者之间可能存在空间。
234234= AWORDHERE('sdf.'aa')
我可以使用正则表达式吗? 或者我应该通过查找索引手动执行此操作?
数据集非常庞大,因此尽可能快地完成数据集非常重要。
答案 0 :(得分:2)
试试这个正则表达式:
\d+=\s?(\w+)\(
在Javascript中它想要:
var myString = "234234=AWORDHERE('sdf.'aa')";// or 234234= AWORDHERE('sdf.'aa')
var myRegexp = /\d+=\s?(\w+)\(/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // AWORDHERE
答案 1 :(得分:1)
你至少可以通过三种方式做到这一点。您需要进行基准测试才能看到最快的速度。
子串w /索引
function extract(from) {
var ixEq = from.indexOf("=");
var ixParen = from.indexOf("(");
return from.substring(ixEq + 1, ixParen);
}
拆分
function extract(from) {
var spEq = from.split("=");
var spParen = spEq[1].split("(");
return spParen[0];
}
正则表达式(demo)
以下是一些可以使用的示例正则表达式
/[^=]+=([^(]+).*/g
这说
[^=]+
- 一个或多个不是=
=
- =
本身(
- 创建一个匹配的组,以便您可以在代码中访问您的匹配[^(]+
- 一个或多个不是(
)
- 关闭匹配组.*
- 匹配行的其余部分最后的/g
告诉它在所有行上执行匹配。
答案 2 :(得分:0)
使用look around
,您可以搜索前面带有=
的字符串,然后搜索(
,如下所示。
正则表达式:(?<==)[A-Z ]+(?=\()
<强>解释强>:
(?<==)
检查[A-Z ]
前面是=
。
[A-Z ]+
符合您的模式。
(?=\()
检查匹配的模式是否后跟(
。
答案 3 :(得分:0)
var str = "234234= AWORDHERE('sdf.'aa')";
var regexp = /.*=\s+(\w+)\(.*\)/g;
var match = regexp.exec(str);
alert( match[1] );
答案 4 :(得分:0)
我为此做出的解决方案比您要求的更为通用,但我认为执行时间不会太长。我没有衡量。如果你需要比这提供更高的效率,评论和我或其他人可以帮助你。
这是我使用node
的命令提示符
> var s = "234234= AWORDHERE('sdf.'aa')"
undefined
> var a = s.match(/(\w+)=\s*(\w+)\s*\(.*/)
undefined
> a
[ '234234= AWORDHERE(\'sdf.\'aa\')',
'234234',
'AWORDHERE',
index: 0,
input: '234234= AWORDHERE(\'sdf.\'aa\')' ]
>
如您所见,这与=
中a[1]
之前的数字相匹配,并且与您在AWORDHERE
中请求的a[2]
名称相匹配。这将适用于=
之前和/或之后的任何数字(包括零)空格。