使用正则表达式从字符串中获取子字符串

时间:2014-12-04 05:50:41

标签: javascript regex

我正在尝试搜索给定字符串上的子字符串。

// format is <stringIndex>~<value>|<stringIndex>~<value>|<stringIndex>~<value>
var test = "1~abc1|2~def2|1~ghi3|4~jk-l4|5~123|6~sj2j";

function getValue(test, stringIndex) {
    // format is <stringIndex>~<value>|<stringIndex>~<value>|<stringIndex>~<value>
    //help with this.
    //I can only get the value if 1 is the passed parameter, here is the code:
    return test.replace(new Regexp(stringIndex + '\~(.+?(?=\|)).+'), '$1');
}

// usage:

getValue(test, '1'); //returns 'abc1', even though there are two 1's
getValue(test, '4'); //returns 'jk-14'
getValue(test, '6'); //returns 'sj2j'
getValue(test, '123213'); // returns ''

基本上,我正在编写一个接受test字符串和stringIndex作为参数的函数,并使用test搜索stringIndex字符串并返回与之相关的价值。测试字符串的格式在上面的注释中说明。 我只是在不使用循环或拆分的情况下寻找正则表达式解决方案。

3 个答案:

答案 0 :(得分:1)

你可能想要这个正则表达式代码:

function getValue(test, stringIndex) {
    // format is <stringIndex>~<value>|<stringIndex>~<value>|<stringIndex>~<value>
    //help with this.
    //I can only get the value if 1 is the passed parameter, here is the code:
    var m = test.match(new RegExp(stringIndex + "~([^|]+)", 'i')) || [null, null];
    return m[1];
}

然后将其称为:

getValue(test, '1');
"abc1"
getValue(test, '4');
"jk-l4"
getValue(test, '6');
"sj2j"
getValue(test, '123213');
null

答案 1 :(得分:1)

以上是两个答案的更新,我们需要为正则表达式添加“\ b”。

// modified the test string.
var test = "311~abc1|2~def2|1~ghi3|4~jk-l4|5~123|6~sj2j";
function getValue(test, stringIndex) {
    var m = test.match(new RegExp("\\b" + stringIndex + "~([^|]+)", 'i')) || [null, null];
    return m[1];
}

> getValue(test, '1');
'ghi3'
> getValue(test, '2');
'def2'
> getValue(test, '11');
null
> getValue(test, '311');
'abc1'

答案 2 :(得分:0)

有很多方法可以编写正则表达式来匹配模式,这实际上取决于用例的特殊性。这是一个解决方案:

var test = "1~abc1|2~def2|1~ghi3|4~jk-l4|5~123|6~sj2j";
function getValue(test, stringIndex) {
    var matches = test.match(new RegExp(stringIndex + "~([\\w-]+)\\|?"));
    return matches ? matches[1] : "";
}

getValue(test, '1'); // 'abc1'
getValue(test, '4'); // 'jk-14'
getValue(test, '6'); // 'sj2j'
getValue(test, '123213'); // ''