我正在尝试更新使用正则表达式检测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个测试结果:空
答案 0 :(得分:0)
代码的问题是,当您使用new RegExp
时,应传递要构造的普通正则表达式,而没有/
分隔符和标志。要使用标志,请在第二个参数中传递它们,例如:
new RegExp ("(?<=ts\\-" + q + "\\-)\\S+", 'i');
但是在可能的情况下使用正则表达式文字会容易得多;除其他外,您不必两次转义反斜杠。并且,在这种情况下,这是可能的。除了使用循环外,您还可以使用在1
处与2
,3
或[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;
}
}
}