new RegExp(/^-?(\d+)(\.{1})?$/);
时间: 2024-10-13 12:10:01 浏览: 21
正则(JS)re=new RegExp(^\\d*$);与re=/^\d*$/;之间区别?
在JavaScript中,`new RegExp()` 和直接使用 `/pattern/` 构造正则表达式的方式有所不同:
1. `new RegExp("pattern")` 创建了一个新的正则对象,这允许你使用字符串来构造模式。例如,`new RegExp("^\\d*$")` 和 `/^\d*$/` 实际上是等价的,它们都匹配只包含数字的字符串(不包括小数点)[^1]。
- `a = new RegExp("^\\d+$");` 的结果是 `/^\d+$/`,测试 "12132" 返回 `false` 因为它不是仅由数字组成的字符串。
- `b = new RegExp("^\\d+$");` 和 `c = /^\d+$/` 结果相同,测试 "12132" 返回 `true`,因为它是纯数字。
- `e = new RegExp("^\\\\d+$")` 和 `f = new RegExp("^\\\\\d+$")` 都会转义反斜杠,得到相同的正则 `/^\d+$/`。
- `g = f = new RegExp("^\\\\\\d+$")` 也是同样的效果,即 `/^\d+$/`。
2. 对于 `re=new RegExp(^\\d*$)` 和 `re=/^\d*$/`[^2],这里的 `^` 和 `$` 应该放在引号外面,正确的写法应该是 `re=new RegExp("^\\d*$")` 或者 `re=/^\d*$/`。由于第一个写法中的 `^` 和 `$` 是字符串的一部分,而不是正则标志,所以它不会匹配整个字符串,导致测试 "123456" 返回 `FALSE`。
`new RegExp(/^-?(\d+)(\.{1})?$/)` 这个正则表达式的含义是匹配负号可选,后面跟着一串数字,可能有小数点但不能单独存在。例如,它可以匹配 "-123", "123", 或 "123.45",但不匹配 "123." 或 ".123"。你可以这样测试它:
```javascript
let regex = new RegExp(/^-?(\d+)(\.{1})?$/);
console.log(regex.test("-123")); // true
console.log(regex.test("123")); // true
console.log(regex.test("123.45")); // true
console.log(regex.test("123.")); // false
console.log(regex.test(".123")); // false
```
阅读全文