[英]How to match all words starting with dollar sign but not slash dollar
我想匹配所有以美元符号开头但不以斜杠和美元符号开头的单词。 我已经尝试过一些正则表达式。
(?:(?!\\)\$\w+)
\\(\\?\$\w+)\b
串
$10<i class="">$i01d</i>\$id
预期结果
*$10*
*$i01d*
但不是这个
*$id*
找到所有预期的匹配词后,我要替换此对象。
一种选择是先消除转义序列,然后匹配清理后的字符串:
s = String.raw`$10<i class="">$i01d</i>\\$id` found = s.replace(/\\\\./g, '').match(/\\$\\w+/g) console.log(found)
这里的最大问题是,您需要一个否定的回首 ,但是,JavaScript不支持它。 可以粗略地模拟它,但是我将提供一个替代方法,虽然效果不佳,但可以使用:
var input = '$10<i class="">$i01d</i>\\\\$id'; var regex = /\\b\\w+\\b\\$(?!\\\\)/g; //sample implementation of a string reversal function. There are better implementations out there function reverseString(string) { return string.split("").reverse().join(""); } var reverseInput = reverseString(input); var matches = reverseInput .match(regex) .map(reverseString); console.log(matches);
它不是很优雅,但是可以胜任。 下面是它的工作原理:
JavaScript 确实支持前瞻表达式( (?>)
)和否定前瞻( (?!)
)。 由于这是反向查找的反向操作 ,因此您可以反转字符串并反转正则表达式,这将完全匹配您想要的内容。 由于所有匹配项都将相反,因此您还需要将它们恢复为原始状态。
就像我说的那样,它并不优雅,因为它会执行很多字符串操作,但确实会产生您想要的结果。
正则表达式的解释通常,“只要不以y 开头的匹配x ”将表示为(?<!y)x
,因此在您的情况下,正则表达式将为
/(?<!\\)\$\b\w+\b/g
演示 (不是JavaScript)
哪里
(?<!\\) //do not match a preceding "\"
\$ //match literal "$"
\b //word boundary
\w+ //one or more word characters
\b //second word boundary, hence making the match a word
当输入反向时,所有令牌也要匹配。 此外,负向后查找被反转为x(?!y)
形式的负向查找,因此新的正则表达式为
/\b\w+\b\$(?!\\)/g;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.