替代已弃用的RegExp。$ n对象属性

时间:2015-08-09 17:08:57

标签: javascript regex

我喜欢使用getAttribute('style')$nRegExp等)的RegExp.$1属性来创建正则表达式单行。 像这样:

RegExp.$2

MDN文档说这些属性现已弃用。什么是更好的非弃用等价物?

1 个答案:

答案 0 :(得分:3)

.match / .exec

您可以将RegEx存储在变量中并使用.exec

var inputString = 'this is text that we must get';
var resultText = ( /\[([^\]]+)\]/.exec(inputString) || [] )[1] || "";
console.log(resultText); 

这是如何运作的:

/\[([^\]]+)\]/.exec(inputString)

这将在字符串上执行RegEx。它将返回一个数组。要访问$1,我们访问数组的1元素。如果它没有匹配,它将返回null而不是数组,如果它返回null,那么||将使它返回空数组[],所以我们不会得到错误。 ||是一个OR,所以如果第一面是假值(exec的未定义),它将返回另一面。

您也可以使用匹配:

var inputString = 'this is text that we must get';
var resultText = ( inputString.match(/\[([^\]]+)\]/) || [] )[1] || "";
console.log(resultText); 

.replace

你也可以使用.replace:

'[this is the text]'.replace(/^.*?\[([^\]]+)\].*?$/,'$1');

如您所见,我已将^.*?添加到RegEx的开头,并.*?$添加到结尾。然后我们用$1替换整个字符串,如果$1未定义,则字符串将为空。如果您想将""更改为:

/\[([^\]]+)\]/.test(inputString) ? RegExp.$1 : 'No Matches :(';

你可以这样做:

'[this is the text]'.replace(/^.*?\[([^\]]+)\].*?$/, '$1' || 'No Matches :(');

如果你的字符串是多行的,请将^[\S\s]*?添加到字符串的开头而将[^\S\s]*?$添加到结尾