我喜欢使用getAttribute('style')
($n
,RegExp
等)的RegExp.$1
属性来创建正则表达式单行。
像这样:
RegExp.$2
MDN文档说这些属性现已弃用。什么是更好的非弃用等价物?
答案 0 :(得分:3)
您可以将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:
'[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]*?$
添加到结尾