内容:
我正在改进一个自定义令牌解析引擎,并希望支持字符,数字和空格字符在不同的语言。
目前,这与英语字符和数字一起使用以下正则表达式
var pattern = /\{\{someText\(?(\d+)?\|?([\w\d\s%]+)?\)?[\s\S]+\}\}/;
// this will extract the number and text in a token like
'{{someText(20|Hello World)}}'.match(pattern);
//output
[20, 'Hello World']
字符串
但是上面的正则表达式无法解析其他语言中的字符:
'{{someText(20|abcdèfg)}}'.match(pattern);
//output
[20, 'abcd']
型
我试过的正则表达式:
我尝试使用XRegexp和下面的正则表达式,但看起来它并不像我预期的那样工作。
var pattern = XRegExp(/\{\{customText\(?(\d+)?\|?([[\p{L}\p{N}_]\p{Nd}[\p{Z}\h\v]%]+)?\)?[\s\S]+\}\}/);
'{{someText(20|abcdèfg)}}'.match(pattern);
//output
[20, undefined]
型
对于新的引擎,我希望也支持其他语言的字符。
'{{someText(20|abcdèfg)}}'.match(pattern);
型
会产生一个输出
[20, abcdèfg]
型
此标记的格式始终类似于{{someText(number|“实际文本”)}}
3条答案
按热度按时间weylhg0b1#
这将允许所有语言中的测试、数字和空格
字符串
之间的一个或多个空格
型
qvk1mo1f2#
你应该试试这个:
字符串
如图所示,在**regex101.com**处
说明-
根据微软公司,
如果指定了符合ECMAScript的行为,则
\w
等效于[a-zA-Z_0-9]
因此,
\w
自然会匹配任何英文字符,而不是带重音的字符。一个很好的解决方法是使用
[^\n\r|]
而不是[\w\d\s%]
,这样它就可以匹配所有字符,除了换行符和管道|
符号(原因很明显)。另外,出于某种原因,你还包含了一个
[\s\S]+
,它基本上可以匹配所有空格和非空格字符(即所有存在的字符)。我删除了它,这样你就可以匹配多次出现的模式,即使是在新的行上:)9njqaruj3#
由于您并不真正关心字符串的内容,因此只需使用
字符串