JavaScript中的preg_match?


76

是否可以JavaScriptpreg_matchin那样做PHP

我希望能够从字符串中获得两个数字:

var text = 'price[5][68]';

分为两个独立的变量:

var productId = 5;
var shopId    = 68;

编辑:我也使用MooTools它是否有帮助。

Answers:


112

JavaScript有一个RegExp可以满足您需求的对象。该String对象具有match()可以帮助您的功能。

var matches = text.match(/price\[(\d+)\]\[(\d+)\]/);
var productId = matches[1];
var shopId    = matches[2];

32
对于其他Google员工;text.match将返回匹配结果。如此var match = text.match(/price\[(\d+)\]\[(\d+)\]/),然后alert(match[1]);
莫里斯(Maurice)2012年

33
var text = 'price[5][68]';
var regex = /price\[(\d+)\]\[(\d+)\]/gi;
match = regex.exec(text);

match [1]和match [2]将包含您要查找的数字。


23
var thisRegex = new RegExp('\[(\d+)\]\[(\d+)\]');

if(!thisRegex.test(text)){
    alert('fail');
}

我发现测试可以执行更多的preg_match,因为它提供了布尔返回值。但是,您必须声明一个RegExp变量。

提示:RegExp在开始和结束时添加了它自己的/,所以不要通过它们。


6
您还可以使用/\[(\d+)\]\[(\d+)\]/.test(text)
0x6C77

我同意,因为当我看到这个问题的标题时,我一直在寻找如何重现preg_match的正则表达式测试功能的原因;)
流感

使用RegExp类构造函数的好处是,如果需要在模式中插入变量,则需要一个字符串!
纳撒尼尔·罗杰斯

只有逃避反斜杠时,就像对我的作品'\ [(\\ d +)\] \ [(\\ d +)\]'
NR

6

这应该工作:

var matches = text.match(/\[(\d+)\][(\d+)\]/);
var productId = matches[1];
var shopId = matches[2];

4
var myregexp = /\[(\d+)\]\[(\d+)\]/;
var match = myregexp.exec(text);
if (match != null) {
    var productId = match[1];
    var shopId = match[2];
} else {
    // no match
}

0

用于在HTML内容中获取图像链接的示例代码。像PHP中的preg_match_all

let HTML = '<div class="imageset"><table><tbody><tr><td width="50%"><img src="htt ps://domain.com/uploads/monthly_2019_11/7/1.png.jpg" class="fr-fic fr-dii"></td><td width="50%"><img src="htt ps://domain.com/uploads/monthly_2019_11/7/9.png.jpg" class="fr-fic fr-dii"></td></tr></tbody></table></div>';
let re = /<img src="(.*?)"/gi;
let result = HTML.match(re);

列阵

0: "<img src="htt ps://domain.com/uploads/monthly_2019_11/7/1.png.jpg""
1: "<img src="htt ps://domain.com/uploads/monthly_2019_11/7/9.png.jpg""

0

一些谷歌搜索使我想到了这一点

function preg_match (regex, str) {
  return (new RegExp(regex).test(str))
}
console.log(preg_match("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$","test"))
console.log(preg_match("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$","what@google.com"))

有关更多信息,请参见https://locutus.io


0

返回匹配的字符串或false

function preg_match (regex, str) {
  if (new RegExp(regex).test(str)){
    return regex.exec(str);
  }
  return false;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.