在' ='之间提取单词和'('

时间:2016-01-31 17:36:37

标签: javascript regex

我有以下字符串

234234=AWORDHERE('sdf.'aa')

我需要提取AWORDHERE

有时候两者之间可能存在空间。

234234= AWORDHERE('sdf.'aa')

我可以使用正则表达式吗? 或者我应该通过查找索引手动执行此操作?

数据集非常庞大,因此尽可能快地完成数据集非常重要。

5 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

\d+=\s?(\w+)\(

Check Demo

在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)

你至少可以通过三种方式做到这一点。您需要进行基准测试才能看到最快的速度。

  1. 子串w /索引

    function extract(from) {
        var ixEq = from.indexOf("=");
        var ixParen = from.indexOf("(");
    
        return from.substring(ixEq + 1, ixParen);
    }
    

  2. 拆分

    function extract(from) {
        var spEq = from.split("=");
        var spParen = spEq[1].split("(");
    
        return spParen[0];
    }
    
  3. 正则表达式(demo

  4. 以下是一些可以使用的示例正则表达式

    /[^=]+=([^(]+).*/g

    这说

    • [^=]+ - 一个或多个不是=
    • 的字符
    • = - =本身
    • ( - 创建一个匹配的组,以便您可以在代码中访问您的匹配
    • [^(]+ - 一个或多个不是(
    • 的字符
    • ) - 关闭匹配组
    • .* - 匹配行的其余部分

    最后的/g告诉它在所有行上执行匹配。

答案 2 :(得分:0)

使用look around,您可以搜索前面带有=的字符串,然后搜索(,如下所示。

正则表达式(?<==)[A-Z ]+(?=\()

<强>解释

(?<==)检查[A-Z ]前面是=

[A-Z ]+符合您的模式。

(?=\()检查匹配的模式是否后跟(

Regex101 Demo

答案 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]名称相匹配。这将适用于=之前和/或之后的任何数字(包括零)空格。