包含圆括号的JavaScript Regex模式
JavaScript Regex Pattern that contains parentheses
使用JavaScript,我需要检查给定模式的第一个实例的字符串,并返回该模式之后(包括该模式)的所有内容。有关典型字符串、模式和所需结果,请参见下面的示例。
我遇到的主要问题是,该模式几乎肯定会包含特殊字符,如圆括号。我无法手动更改模式来转义那些特殊字符。除非我能够先使用replace
来做到这一点?
例如result = string.match(pattern.replace
(带转义的特殊))
我不确定这样的事情是否可能。Regex总是让我头疼,我很感激任何正确或替代的方向。
背景
我正试着用更少的钱做一些复杂的混音。因此,通过使用反勾号进行转义,我只能使用单行JavaScript。有关在LESS中使用JavaSCript的信息,请参阅此处。我希望使用新的可变参数支持来获得多个颜色停止。例如.radial-gradient(@shape, @position, @colorStops...)
然而,LESS只为您提供使用@arguments时传递的全部参数范围。因此,我希望使用regex为字符串使用@arguments,为模式使用@colorStop,并返回第一个颜色停止之后的所有内容(包括第一个颜色结束)。LESS在使用@colorStop时返回第一个颜色停止变量。一般概念取自此处)
例如:
字符串:圆形0%50%rgba(96,16,48,0)9px#661133 10px rgba,16,48,0)11px
图案:rgba(96,16,48,0)9px
结果:rgba(96,16,48,0)9px#661133 10px rgba(96,16,48,0)11px
"我无法手动更改模式来转义那些特殊字符。除非我能够使用.replacefirst?"
是的,你可以。给定一个变量pattern
,它是包含正则表达式模式的字符串,那么:
pattern = pattern.replace(/[-/''^$*+?.()|[']{}]/g, '''$&');
将转义正则表达式中所有具有特殊含义的字符,并将结果放回同一变量中。当然,只有当模式中的每个字符都被视为要匹配的文字字符时,这才有效。
"我需要检查给定模式的第一个实例的字符串,并返回该模式之后的所有内容"
我只需将.*
附加到模式的末尾,这样它就会匹配后面所有字符的指定位。也就是说,如果正则表达式/abc/
与"abc"
的第一个实例匹配,那么正则表达式/abc.*/
将与"abc"
以及后面的每个字符匹配。(在正则表达式中,.
匹配任何字符,*
匹配前一位零次或多次,默认情况下进行"贪婪"匹配。)
把这些放在一起:
function matchToEnd(pattern, str) {
var re = new RegExp(pattern.replace(/[-/''^$*+?.()|[']{}]/g, '''$&') + ".*"),
result = str.match(re);
if (result)
return result[0];
else {
// didn't match, return default value of your choice, e.g.:
return null;
}
}
var result = matchToEnd("rgba(96, 16, 48, 0) 9px",
"rgba(96, 16, 48, 0) 9px #661133 10px rgba(96, 16, 48, 0) 11px");
演示:http://jsfiddle.net/JVdnz/
请注意,回到我之前的假设,即您的正则表达式模式在正则表达式中不包含任何具有特殊意义的字符,如果是这样的话,那么您不需要正则表达式来完成此任务,您只需将.indexOf()
方法与.substr()
方法结合使用即可:
var i = str.indexOf(pattern); // find index of first instance of pattern
if (i != -1)
return str.substr(i); // return from that index to end of string
下面是一个类似于上一个演示的演示,但使用了.indexOf()
而不是regex:http://jsfiddle.net/JVdnz/1/
如果您的模式不需要使用任何regex功能,并且只需要替换第一个出现的正则表达式,那么您可以将一个字符串作为模式传递给replace方法。
否则(如果您需要regex功能或需要替换所有出现的模式),则可以创建一个函数来转义字符串中的特殊字符,并动态生成regex对象。
- 包含圆括号的JavaScript Regex模式
- Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
- 从Regex模式获取子字符串
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- RegEx模式匹配101-999
- 根据Javascript中的RegEx模式测试字符串
- 带有可选子字符串的JavaScript RegEx模式
- Regex模式匹配连接
- 需要简单解释JS中的RegEx模式
- JavaScript REGEX 模式匹配
- Javascript Regex 模式来拾取 URL
- 用于 JavaScript 的 REGEX 模式
- REGEX模式处理有或没有报价
- 是否不可能在JavaScript中使用多行regex模式来指示输入字符串的开始
- 从数据库(NodeJS)中的搜索返回Regex模式
- 根据RegEx模式筛选结果
- Regex模式,不允许使用除ALL、-和[0-9]之外的字符
- Regex模式无法正常工作.但仅在Extjs/Javascript中
- 有人会解释这个JavaScript REGEX模式吗?
- Regex模式搜索从2个字母或2个数字开始