4
<script>
var String = "1 Apple and 13 Oranges";
var regex = /[^\d]/g;
var regObj = new RegExp(regex);
document.write(String.replace(regObj,'')); 
</script>

它工作正常 - 返回字符串中的所有数字。

但是,当我像这样在正则表达式周围加上引号时:

var regex = "/[^\d]/g"; 这行不通

在这种情况下,如何将字符串转换为有效的正则表达式?

谢谢

4

2 回答 2

7

您可以通过两种方式创建正则表达式,使用正则表达式文字符号或 RegExp 构造函数。看来你把两者混为一谈了。:)

这是字面意思:

var regex = /[^\d]/g;

在这种情况下,您没有使用引号。末尾的 / 字符用作分隔符,您在末尾指定标志。

以下是如何使用 RegExp 构造函数,在其中将模式和标志(可选)作为字符串传递。当您使用字符串时,您必须使用“\”转义其中的任何特殊字符。

由于'\'(反斜杠)是一个特殊字符,如果使用双引号,则必须使用另一个反斜杠来转义反斜杠。

var regex = new RegExp("[^\\d]", "g");

希望这是有道理的。

于 2012-11-27T12:56:46.963 回答
1

由于 slash( \) 对字符串有特殊的含义(例如“\n”、“\t”等...),当您传递给正则表达式时,您需要转义该符号:

var regex = "[^\\d]";

表达式标志(例如gi等...)也必须作为单独的参数传递给RegExp. 所以总的来说:

var regex = "[^\\d]";
var flags = "g";
var regObj = new RegExp(regex, flags);
于 2012-11-27T12:58:19.337 回答