括号内将有一个Web链接,它是单引号之间的字符串。函数的名称将始终相同。例如,如果我有my_func('https://old.reddit.com'),字符串my_func(和)应该匹配,而'https://old.reddit.com'不应该匹配。我能想到的最好的东西是my_func\((?=[^\)]+)\)。
my_func('https://old.reddit.com')
my_func(
)
'https://old.reddit.com'
my_func\((?=[^\)]+)\)
jfewjypa1#
您可以使用lookbehind和lookahead,并匹配任何不是引号的内容(一次或多次),直到出现右引号和右括号:
const getFnArg = (str) => str.match(/(?<=\bmy_func\(['"`])[^'"`]+(?=['"`]\))/)?.[0]; console.log(getFnArg(`my_func('https://old.reddit.com')`)) // "https://old.reddit.com" console.log(getFnArg(`my_func('whatever')`)) // "whatever" console.log(getFnArg(`my_func(noquotes)`)) // undefined console.log(getFnArg(`my_func('')`)) // undefined console.log(getFnArg(`my_func()`)) // undefined
字符串Regex1010.com demo或者一个没有向后/向前看的简单例子:
const getFnArg = (str) => str.match(/\bmy_func\(['"`]([^'"`]+)['"`]\)/)?.[1]; console.log(getFnArg(`my_func('https://old.reddit.com')`)) // "https://old.reddit.com" console.log(getFnArg(`my_func('whatever')`)) // "whatever" console.log(getFnArg(`my_func(noquotes)`)) // undefined console.log(getFnArg(`my_func('')`)) // undefined console.log(getFnArg(`my_func()`)) // undefined
型
sauutmhj2#
可以使用.+?。
.+?
my_func\(.+?\)
字符串这将匹配您的静态文本,并允许左括号和右括号内的任何值。?将修改+,使其成为惰性量词。这是在你有一个以上的my_func匹配文本的情况下,平衡括号将被匹配,而不是相邻的匹配。
?
+
my_func
2条答案
按热度按时间jfewjypa1#
您可以使用lookbehind和lookahead,并匹配任何不是引号的内容(一次或多次),直到出现右引号和右括号:
字符串
Regex1010.com demo
或者一个没有向后/向前看的简单例子:
型
sauutmhj2#
可以使用
.+?
。字符串
这将匹配您的静态文本,并允许左括号和右括号内的任何值。
?
将修改+
,使其成为惰性量词。这是在你有一个以上的
my_func
匹配文本的情况下,平衡括号将被匹配,而不是相邻的匹配。