带有变量的javascript RexEx无法产生预期的结果

时间:2018-10-06 03:38:21

标签: javascript regex variables

我正在尝试更新使用正则表达式检测ts-english,ts-german,ts-italian等值的项目。 这段代码会产生

var str = "ts-english";
let patt = /(?<=ts\-)\S+/i;
var res = patt.exec(str);
console.log (res)

输出:['english',索引:3,输入:'ts-english',组:undefined]

我希望能够在for循环中为ts-1-english做一些事情。 我了解我应该在循环的每次迭代期间使用RegEx来设置变量。

var str = "ts-1-english";
for (q=1; q <= 3; q++){
    var mpatt = new RegExp ("/(?<=ts\\-" + q + "\\-)\\S+/i")
    console.log (mpatt)
    var res = mpatt.exec(str);
    console.log ("q: " + (q) + " result of test: " + res)
}

这是我的输出。

  

//(?<= ts-1-)\ S + / i / q:1个测试结果:空

     

//(?<= ts-2-)\ S + / i / q:2个测试结果:空

     

//(?<= ts-3-)\ S + / i / q:3个测试结果:空

1 个答案:

答案 0 :(得分:0)

代码的问题是,当您使用new RegExp时,应传递要构造的普通正则表达式,而没有/分隔符和标志。要使用标志,请在第二个参数中传递它们,例如:

new RegExp ("(?<=ts\\-" + q + "\\-)\\S+", 'i');

但是在可能的情况下使用正则表达式文字会容易得多;除其他外,您不必两次转义反斜杠。并且,在这种情况下,这是可能的。除了使用循环外,您还可以使用在1处与23[1-3]匹配的字符集,并使用const str = "ts-1-english"; const mpatt = /(?<=ts-[1-3]-)\S+/i; const res = mpatt.exec(str); console.log(res)

const str = "ts-1-english";
const mpatt = /ts-[1-3]-(\S+)/i;
const res = mpatt.exec(str);
console.log(res);

还请注意,JavaScript中的向后搜索不受广泛支持;您可以考虑将group用于您要提取的部分:

class DForm{



    public $currentValue;
    public $values = array();
    public $errors = array();



    // Mehod Post
    public function post($key){

        $this->values[$key] =  trim(isset($_POST['$key']));
         $this->$currentValue = $key;

         return $this;
    }

    // Empty Method
    public function isEmpty(){
        if (empty($this->values[$this->$currentValue])) {
            $this->errors[$this->$currentValue]['empty'] = "Field must not be Empty!";

        }
        return $this;
    }
    // Empty Method for Only Category
    public function isCatEmpty(){
        if ($this->values[$this->$currentValue] == 0) {
            $this->errors[$this->$currentValue]['empty'] = "Field must not be Empty!";

        }
        return $this;
    }

    // Lenth method
    public function length($min= 0, $max){
        if (strlen($this->values[$this->$currentValue]) < $min OR $this->values[$this->$currentValue] > $max) {
            $this->errors[$this->$currentValue]['length'] = "Should min".$min." And Max ".$max." Characters!";
        }
        return $this;
    }


    // Submit Method
    public function submit(){
        if (empty($this->errors)) {
            return true;
        }else{
            return false;
        }
    }

}