犀牛中的正则表达式 lookbehind/lookahead
Regex lookbehind/lookahead in Nashorn
这是我想要做的:
我想替换字符串中的某些标记,但前提是它们不在另一个单词中。
示例:
token= pos
replacement= XXX
//Strings to check:
Repository
pos
boss && pos
boss && xpos && pos
//Expected results:
Repository
XXX
boss && XXX
boss && xpos && XXX
为此我创建了一个正则表达式:
/(?<!\w)POS(?!\w)/
问题是 POS 应该是一个变量。
因为这只适用于新的 Regexp 语法,所以我尝试像这样修改它:
var rx = new RegExp("(?<!\w)" + item[0] + "(?!\w)");
正如您可能猜到的那样,最后有一个循环应该替换字符串中的几个标记(不需要/g)。
问题是,如果我尝试在上面运行这个代码段,我总是会得到一个期望:
RuntimeException - org.mozilla.javascript.EcmaError: SyntaxError: Invalid quantifier ?
现在我不确定问题是正则表达式错误还是仅仅是 nashorn 的限制。
假设您只想将 pos
替换为一个独立的单词,只需使用单词边界:
var rx = new RegExp("\b" + item[0] + "\b");
这是我想要做的: 我想替换字符串中的某些标记,但前提是它们不在另一个单词中。 示例:
token= pos
replacement= XXX
//Strings to check:
Repository
pos
boss && pos
boss && xpos && pos
//Expected results:
Repository
XXX
boss && XXX
boss && xpos && XXX
为此我创建了一个正则表达式:
/(?<!\w)POS(?!\w)/
问题是 POS 应该是一个变量。 因为这只适用于新的 Regexp 语法,所以我尝试像这样修改它:
var rx = new RegExp("(?<!\w)" + item[0] + "(?!\w)");
正如您可能猜到的那样,最后有一个循环应该替换字符串中的几个标记(不需要/g)。 问题是,如果我尝试在上面运行这个代码段,我总是会得到一个期望:
RuntimeException - org.mozilla.javascript.EcmaError: SyntaxError: Invalid quantifier ?
现在我不确定问题是正则表达式错误还是仅仅是 nashorn 的限制。
假设您只想将 pos
替换为一个独立的单词,只需使用单词边界:
var rx = new RegExp("\b" + item[0] + "\b");