我希望匹配决赛之外的所有内容-但忽略包含return new <class>(<parameters>)
的单词。
示例:
Tablet-MS Surface Pro 4-里卡多·科尔特斯(OFFSITE)
我如何只得到()
?
这是我尝试过的:
Ricardo Cortez
谢谢
答案 0 :(得分:0)
不知道您是如何运行此正则表达式的,我会提出一些类似的建议:
/ - ([^\(]+) /g
旨在捕获括号内的所有内容。基本上,找到一个以连字符开头的匹配项,然后捕获所有内容,直到它碰到一个开括号字符(即不是开括号的任何字符)。
答案 1 :(得分:0)
您可以使用alternation首先匹配您不想要的内容,然后在组中捕获您想要的内容。
此模式不需要根据您使用的否定字符类[^-]+
否定连字符但实际上不将其作为必需字符的模式,将连字符包含在字符串中。
^.*-|(?:^|[ \t]+)([^\s()]+)(?!\S)
说明
^
字符串的开头.*-
匹配所有字符0次以上,然后匹配-
,以便匹配最后一个连字符|
或(?:^|[ \t]+)
声明字符串的开头,或者匹配1+倍的空格或制表符([^\s()]+)
在与+ times not a whitespace char or
(or
)相匹配的第1组中捕获(?!\S)
负向查找,断言右边的内容不是非空格字符修改
如果要使用replace,则可以匹配所有您不想保留的内容,并用空字符串替换:
^.*-\s*|\s*\S*[()]+\S*
说明
^.*-\s*
将任何字符单位匹配为最后一个连字符,后跟0+个空白字符|
或\s*
将空格匹配0次以上\S*[()]+\S*
匹配0+次非空格字符,不匹配(
或)
1+次,再匹配0+次非空格字符例如
$string = "Tablet - MS Surface Pro 4 - Ricardo Cortez (OFFSITE)"
$name = $string -replace '^.*-|\S*[()]+\S*',''
echo $name
答案 2 :(得分:0)
我的猜测是您想删除该名称。如果是这样,我们要捕获它,然后使用捕获组替换它。也许表达式类似于:
(.+?-\s)([A-Z].+)(\(.+)
const regex = /(.+?-\s)([A-Z].+)(\(.+)/gm;
const str = `Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)`;
const subst = `$1$3`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
如果我们可能想删除()
及其中的所有内容,我们可以在第一个捕获组中滑动每个字符,然后捕获不需要的字符,然后替换为$1
:
([\s\S].*?)(\(.+?\))?
const regex = /([\s\S].*?)(\(.+?\))?/gm;
const str = `Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez`;
const subst = `$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
jex.im还有助于可视化表达式。